Bonjour

J'ai créé un renderer et une editor qui contiennent un JPanel avec une checkbox et une combobox.

Mon problème est que il faut que je clique une fois sur la cellule ou la ligne pour la sélectionner et une fois de plus pour pouvoir sélectionner ou non la checkbox/combobox.
Je n'arrive pas a trouver comment faire pour que l'utilisateur puisse directement sélectionner la checkbox/combobox (Quand je passe la souris sur les composants le rollover n'est pas activé).


Le renderer:
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
	class PanelRenderer extends JPanel implements TableCellRenderer {
 
		private JCheckBox	check	= new JCheckBox();
		private JComboBox	combo	= new JComboBox();
 
		public PanelRenderer() {
			super();
			init();
		}
 
		private void init() {
			setLayout(new FlowLayout(FlowLayout.LEFT, 5, 10));
			add(check);
			add(combo);
		}
 
 
		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
 
			if (value instanceof CustomItem) {
				this.check.setSelected(((CustomItem) value).isSeleted());
				this.combo.setSelectedItem(((CustomItem) value).getValue());
			}
			if (isSelected) {
				setForeground(table.getSelectionForeground());
				setBackground(table.getSelectionBackground());
			} else {
				setForeground(table.getForeground());
				setBackground(UIManager.getColor("Button.background"));
			}
 
			if(isSelected==false)
				if(row % 2==0){
					this.setBackground(new Color(198, 217, 241)); 
					this.check.setBackground(new Color(198, 217, 241)); 
				}
				else{
					this.setBackground(new Color(238, 236, 225)); 
					this.check.setBackground(new Color(238, 236, 225)); 
				}
 
			return this;
		}
 
	}
l'editor:

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
	class PanelEditor extends AbstractCellEditor implements TableCellEditor {
		protected JPanel	panel;
		protected JCheckBox	check;
		private CustomItem	customItem;
		protected JComboBox	combo;
		private JTable		table;
		private int			row;
		private int			column;
 
		public PanelEditor() {
			super();
			panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 10));
			check = new JCheckBox();
			check.setOpaque(true);
 
			check.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					new Thread(new Runnable() {
						@Override
						public void run() {
							SwingUtilities.invokeLater(new Runnable() {
								@Override
								public void run() {
									String comboValue = "";
									if (combo.getItemCount() != 0)
										comboValue = (String) combo.getSelectedItem();
									// customItem.setSeleted(check.isSelected(), row);
									// customItem.setValue(comboValue, row);
									customItem.setSeleted(check.isSelected());
									customItem.setValue(comboValue);
									table.getModel().setValueAt(customItem, row, column);
									// fireEditingStopped();
									// getCellEditorValue();
								}
							});
						}
					}).start();
				}
			});
			combo = new JComboBox();
			combo.setOpaque(true);
			combo.addItemListener(new ItemListener() {
 
				@Override
				public void itemStateChanged(ItemEvent event) {
					if (event.getStateChange() == ItemEvent.SELECTED) {
						Object item = event.getItem();
						customItem.setSeleted(check.isSelected());
						customItem.setValue(item.toString());
						table.getModel().setValueAt(customItem, row, column);
					}
 
				}
			});
 
			panel.add(check);
			panel.add(combo);
		}
 
		public void setComboxBoxData(String[] data) {
			this.combo.removeAllItems();
			this.combo.setModel(new DefaultComboBoxModel(data));
			this.combo.setSelectedIndex(0);
		}
 
		public void setComboxBoxData(Vector<String> liftModel) {
			this.combo.removeAllItems();
			this.combo.setModel(new DefaultComboBoxModel(liftModel));
			this.combo.setSelectedIndex(0);
 
		}
 
		@Override
		public Object getCellEditorValue() {
 
			return customItem;
 
		}
 
		public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
			this.table = table;
			this.customItem = (CustomItem) value;
			this.row = row;
			this.column = column;
			this.check.setSelected(customItem.isSeleted());
			this.combo.setSelectedItem(customItem.getValue());
			if (isSelected) {
				check.setForeground(table.getSelectionForeground());
				check.setBackground(table.getSelectionBackground());
			} else {
				check.setForeground(table.getForeground());
				check.setBackground(table.getBackground());
			}
 
			if(isSelected==false)
				if(row % 2==0){
					this.panel.setBackground(new Color(198, 217, 241)); 
					this.check.setBackground(new Color(198, 217, 241)); 
				}
				else{
					this.panel.setBackground(new Color(238, 236, 225)); 
					this.check.setBackground(new Color(238, 236, 225)); 
				}
			return panel;
		}
 
	}