1 pièce(s) jointe(s)
Identifier un bouton pour en définir l'action
Bonjour tout le monde.
J'aimerai définir l'action de différents boutons mais dans des conditions bien particulières pour rester polie.
Je dois travailler sur un "code à trous" d'on je ne suis pas l'auteur.
Il me faut le comprendre ce code mais surtout comprendre ou l'auteur voulait en venir.
Et c'est bien là que se trouve mon problème.
Voila donc le résultat du code mis en place:
Pièce jointe 374108
Sachant que la JTable à en fait plusieurs lignes.
Pour ce qui est de mon travail, je dois définir l'action du bouton "DETAIL".
Voici la classe dans laquelle ce trouve le trou que je doit compléter:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| public class ViewDetailVehiculeListener extends ButtonListener {
private Integer id;
public void actionPerformed(ActionEvent e) {
/*
Vous devez définir comment afficher le détail d'un véhicule
ceci dans un popup personnalisée
*/
}
} |
Cette classe est utiliser ici:
Code:
1 2 3 4 5 6 7 8
| tab = new JTable(data, title);
if (table.equals(DatabaseTable.VEHICULE)) {
tab.getColumn("ACTION").setCellRenderer(new ButtonRenderer("SUPPRIMER"));
tab.getColumn("ACTION").setCellEditor(new ButtonEditor(new JCheckBox(), "SUPPRIMER"));
tab.getColumn("DETAIL").setCellRenderer(new ButtonRenderer("DETAIL"));
tab.getColumn("DETAIL").setCellEditor(new ButtonEditor(new JCheckBox(), "DETAIL", new ViewDetailVehiculeListener()));
} |
"data" et "title" sont définis plus haut dans le code depuis une base de données.
Je vous donne BouttonRenderer et BouttonEditor :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package fr.ocr.ihm;
import java.awt.Component;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
public class ButtonRenderer extends JButton implements TableCellRenderer {
private String nom;
public ButtonRenderer(String title) {
nom = title;
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean isFocus, int row, int col) {
setText(nom);
// On retourne notre bouton
return this;
}
} |
Code:
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
| package fr.ocr.ihm;
import java.awt.Component;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JTable;
import fr.ocr.ihm.listener.ButtonListener;
/**
* Classe permettant de définir les comportements
* des boutons du JTable
* @author cysboy
*/
public class ButtonEditor extends DefaultCellEditor {
protected JButton button;
private boolean isPushed;
private ButtonListener bListener;
private String title = "";
// Constructeur avec une CheckBox
public ButtonEditor(JCheckBox checkBox, String t) {
// Par défaut, ce type d'objet travaille avec un JCheckBox
super(checkBox);
// On crée à nouveau un bouton
button = new JButton();
button.setOpaque(true);
// On lui attribue un listener
bListener = new ButtonListener();
button.addActionListener(bListener);
title = t;
}
public ButtonEditor(JCheckBox checkBox, String t, ButtonListener l) {
// Par défaut, ce type d'objet travaille avec un JCheckBox
super(checkBox);
// On crée à nouveau un bouton
button = new JButton();
button.setOpaque(true);
// On lui attribue un listener
bListener = l;
button.addActionListener(bListener);
title = t;
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
// On précise le numéro de ligne à notre listener
bListener.setRow(row);
// Idem pour le numéro de colonne
bListener.setColumn(column);
// On passe aussi le tableau en paramètre pour des actions potentielles
bListener.setTable(table);
// On réaffecte le libellé au bouton
button.setText(title);
// On renvoie le bouton
return button;
}
} |
Mon problème est que je ne comprend pas comment on peut savoir sur le bouton de quel ligne j'ai bien pu appuyer.
Peut être que je dois utiliser getTableCellEditorComponent() quelque part mais je ne voit même pas quoi en faire.
Merci de votre aide.