Bonjour,
Si j'ai bien compris, pour pouvoir faire "communiquer" des composants entre eux, je dois utiliser des listner.
J'ai une JFrame qui contient deux JPannel. Le premier contient un JTable, le second une JList.
J'ai plusieurs petits soucis. Quand je clique sur un item de ma JList, je modifie un de ses attribues (un booleen qui passe à vrai).
Je souhaiterais que quand je clique/survole une case du tableau, je puisse récupérer l'instance du modèle sélectionné.
En plus, je souhaiterais que si je fais un clique droit sur le tableau, si un item est sélectionné, je puisse le déselectionner dans la JList.
Voilà les parties critiques:
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 private JTable getJTable1() { if (jTable1 == null) { jTable1 = new JTable(tModel); jTable1.setSize(155, 155); jTable1.setDefaultRenderer(World.class, new CellPannel()); jTable1.setRowHeight(76); jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); TableColumn col = null; for(int i = 0; i < jTable1.getModel().getColumnCount(); i++){ col = jTable1.getColumnModel().getColumn(i); col.setMinWidth(89); } } return jTable1; }Le listener de la JList:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private JList getJList0(){ if(jList0==null){ jList0 = new JList(); jList0.setCellRenderer(new PlantWidget()); jList0.setAutoscrolls(false); jList0.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } return jList0; }
Je me sert de ça pour le rendu de mes items:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Override public void mouseClicked(MouseEvent e) { JList list = (JList)e.getSource(); int index = list.locationToIndex(e.getPoint()); Plant p = (Plant)list.getModel().getElementAt(index); if(SwingUtilities.isLeftMouseButton(e)){ //On selectionne un item list.getCellRenderer().getListCellRendererComponent(list, p, index, true, true); }else list.clearSelection(); }
Je souhaiterais donc savoir comment depuis mon tableau, récupérer le status de la JList, et finalement une instance/la class représentée par l'item sélectionné.
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 public Component getListCellRendererComponent(JList list, Object value, int index, boolean selected, boolean cellHasFocus) { Class<? extends Plant> c = ((Plant)value).getClass(); Plant p; try { p = c.newInstance(); } catch (Exception e) { e.printStackTrace(); p = null; } isSelected = selected; if(isSelected){ setBackground(Color.GREEN); }else{ setBackground(Color.WHITE); } //this.jLabel0.setText("Nom: " + p.getName()); this.jLabel0.setText(Boolean.toString(isSelected)); this.jLabel1.setText("Prix: " + String.valueOf(p.getPrice()) + ""); this.jLabel2.setText("Polution: " + String.valueOf(p.getPolution())); this.jLabel3.setText("Entretient: " + String.valueOf(p.getMaintainCost())+""); this.jLabel4.setText("Production: " + String.valueOf(p.getMaxProduction())+"Watt"); this.jLabel5.setIcon(p.getBuildIcone()); return this; }
NOTE: je ne sais pas si le "isSelected = selected;" est nécessaire, mais il m'aide bien pour les tests.
Merci d'avance
Seeme







Répondre avec citation
Partager