Bonjour,

Un problème qui parait simple à priori, mais sur lequel je me casse les dents depuis hier.

Dans l'exemple que j'ai créé ci-dessous, je souhaiterais que dès l'affichage de la JFrame, je puisse commencer à taper une valeur dans la 4ième colonne sans avoir à faire un double clic dans la cellule sélectionnée.

Merci d'avance pour tout conseil.

Gégé

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
package test;
 
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
 
class TestJTable  extends JFrame
{
	private static final long serialVersionUID = 1L;
	private JTable jt;
	private JPanel MainPanel = null;
	private DefaultTableModel   dtm;
    int currentSelectedRow = 0;
 
    class UnfocusableRenderer extends javax.swing.table.DefaultTableCellRenderer
	{
		private static final long serialVersionUID = 1L;
 
		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
	    {
	      Component comp = super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
	      if(hasFocus) table.changeSelection(row,column+1,false,false);
	      return comp;
	    }
	}  
 
  public  TestJTable ()
  {
	 setName("Exemple de Jtable");
 	 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
 	 setSize(454, 422);
 	 MainPanel = new JPanel();
 	 MainPanel.setName("JDialogContentPane");
 	 MainPanel.setLayout(null);
 	 MainPanel.setBackground(new Color(157,224,137));
 	 setContentPane(MainPanel); 
 
	 JScrollPane pane = new JScrollPane();
	 pane.setBounds(38, 55, 390, 77);
	 MainPanel.add(pane);
 
	 String[] col = {"Ref.", "Fournisseur", "Prix Unitaire.","Nombre","Livré O/N"}; 
	 String [][] data = new String[2][5];
	 dtm = new DefaultTableModel(data,col);
	 dtm.setRowCount(0);
	 dtm.addRow(new Object[]{"   102456  ", "   Dupont "  ,  "   25.00 €"});  
	 dtm.addRow(new Object[]{"   568742  ", "   Lefebvre "  ,  "   12.50 €"}); 
	 jt = new JTable(dtm)  
	 {
		private static final long serialVersionUID = 1L;
		public boolean isCellEditable(int row,int col ) 
		 {  
			 if (col  ==3 | col ==4)  return true;   
			 else return false;
		 }
	 };
 
     jt.setFont(new Font("Tahoma", Font.PLAIN, 14));
	 pane.setViewportView(jt);
	 JTableHeader header = jt.getTableHeader();
	 header.setBackground(java.awt.Color.yellow);
	 jt.setRowHeight(27);
	 jt. setCellSelectionEnabled(true);
	 for (int i=0;i<3; i++)  // on rend les 3 premières colonnes non focussable
	 {
		 javax.swing.table.TableColumn tc  = jt.getColumnModel().getColumn(i);
		 tc .setCellRenderer(new UnfocusableRenderer());
	 }
	 jt.changeSelection(0, 3, false,false);
	 jt.editCellAt(0, 3); 
     this.setLocationRelativeTo(null);
 
  }
 
  public static void main (String[] args)
  {
	  new  TestJTable().setVisible(true); 
  }
}