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 ?
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.
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.