2 votes

Comprendre comment ajouter un JButton à un JTable

J'essaie de mettre en place des boutons dans ma JTable. Je me suis penché sur cet exemple .

Ce que je ne comprends pas, c'est ce constructeur :

public ButtonEditor(JCheckBox checkBox) {
    super(checkBox);
    button = new JButton();
    button.setOpaque(true);
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        fireEditingStopped();
      }
    });
}

Qu'est-ce que la JCheckBox a à voir avec quoi que ce soit ? Il n'y a aucune JCheckBox affichée nulle part et il semble qu'elle ne soit même pas pertinente dans l'exemple. TIA.

3voto

Praveen Points 1278

El DefaultCellEditor L'utilisation ici est plus un hack pour utiliser les boutons car il accepte seulement JCheckBox , JComboBox y JTextField .

Si vous voulez vraiment mettre en œuvre pour JButton vous pouvez aussi faire comme ça,

class ButtonEditor extends AbstractCellEditor 
 implements javax.swing.table.TableCellEditor, 
            javax.swing.tree.TreeCellEditor

Sinon vous pouvez mettre à jour votre implémentation pour utiliser un constructeur avec JButton comme paramètre ou constructeur par défaut,

Approche 1

public ButtonEditor() {
    super(new JCheckBox());
    button = new JButton();
    button.setOpaque(true);
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        fireEditingStopped();
      }
    });
  }

et peut être consulté comme,

table.getColumn("Button").setCellEditor(
        new ButtonEditor());

Approche 2

public ButtonEditor(JButton button) {
    super(new JCheckBox());
    this.button = button;
    button.setOpaque(true);
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        fireEditingStopped();
      }
    });
  }

Cette approche offre une meilleure clarté et une meilleure utilisation du composant bouton en dehors de l'éditeur de cellules également,

JButton button=new JButton();
table.getColumn("Button").setCellEditor(
       new ButtonEditor(button));

1voto

zlakad Points 1173

C'est parce que class ButtonEditor extends DefaultCellEditor et le constructeur de DefaultCellEditor dans votre exemple ressemble à ceci DefaultCellEditor​(JCheckBox checkBox)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X