Comment ajouter un bouton dans une rangée de JTable en java Swing

j'ai fait une GUI swing qui ont JTable avec quelques lignes et des colonnes.Comment ajouter un bouton à row dans un JTable ?

26
demandé sur kleopatra 2009-09-25 09:13:24

3 réponses

on ne l'ajoute pas à une rangée - on l'ajoute à la cellule. Ce tutoriel décrit ce dont vous avez besoin.

33
répondu Bostone 2011-10-04 23:22:51

Vous pouvez ajouter un Composant comme une cellule de tableau.

tout d'abord, vous devez implémenter une classe qui a JButton comme classe parent et deux interfaces qui TableCellRenderer et TableCellEditor.

la raison qui devrait mettre en œuvre TableCellEditor est pour recevoir bouton ActionEvent.

public class TableButton extends JButton implements TableCellRenderer, TableCellEditor {
  private int selectedRow;
  private int selectedColumn;
  Vector<TableButtonListener> listener;

  public TableButton(String text) {
    super(text); 
    listener = new Vector<TableButtonListener>();
    addActionListener(new ActionListener() { 
      public void actionPerformed( ActionEvent e ) { 
        for(TableButtonListener l : listener) { 
          l.tableButtonClicked(selectedRow, selectedColumn);
        }
      }
    });
  }

  public void addTableButtonListener( TableButtonListener l ) {
    listener.add(l);
  }

  public void removeTableButtonListener( TableButtonListener l ) { 
    listener.remove(l);
  }

  @Override 
  public Component getTableCellRendererComponent(JTable table,
    Object value, boolean isSelected, boolean hasFocus, int row, int col) {
    return this;
  }

  @Override
  public Component getTableCellEditorComponent(JTable table,
      Object value, boolean isSelected, int row, int col) {
    selectedRow = row;
    selectedColumn = col;
    return this;
  } 

  @Override
  public void addCellEditorListener(CellEditorListener arg0) {      
  } 

  @Override
  public void cancelCellEditing() {
  } 

  @Override
  public Object getCellEditorValue() {
    return "";
  }

  @Override
  public boolean isCellEditable(EventObject arg0) {
    return true;
  }

  @Override
  public void removeCellEditorListener(CellEditorListener arg0) {
  }

  @Override
  public boolean shouldSelectCell(EventObject arg0) {
    return true;
  }

  @Override
  public boolean stopCellEditing() {
    return true;
  }
}

puis, j'ai ajouté un EventListener nommé TableButtonListener pour gérer l'événement bouton comme suit.

public interface TableButtonListener extends EventListener {
  public void tableButtonClicked( int row, int col );
}

Et utiliser au-dessus de Convertisseur/Éditeur.

TableButton buttonEditor = new TableButton("Button");
buttonEditor.addButtonListener(new TableButtonListener() {
  @Override
  public void tableButtonClicked(int row, int col) {
    // do something 
  }     
}); 

TableColumn col = new TableColumn(1, 80);
col.setCellRenderer(buttonEditor);
col.setCellEditor(buttonEditor);

cols.addColumn(colPattern);

si vous voulez afficher l'étiquette d'un bouton différent pour chaque ligne, vous devez insérer le bloc de code dans le component getTableCellRendererComponent et getTableCellEditorComponent qui est de modifier l'étiquette du bouton.

edit: le Code se compile maintenant. Bracketing d'erreur dans TableButton constructeur fixe.

20
répondu xrath 2013-11-15 17:06:21

Bouton Tableau De La Colonne donner une approche.

8
répondu camickr 2009-09-25 05:41:18