dinamicamente - Cómo agregar el botón en una fila de JTable en Swing java
agregar filas jtable dinamicamente (3)
He hecho una GUI de swing que tiene JTable con algunas filas y columnas. ¿Cómo debo agregar un botón para remar en una JTable?
No lo agrega a una fila; lo agrega a la celda. Este tutorial describe lo que necesitas.
Puede agregar Component como una celda de tabla.
En primer lugar, debe implementar una clase que tenga JButton como clase principal y dos interfaces que TableCellRenderer y TableCellEditor.
La razón por la que debería implementar TableCellEditor es para recibir ActionEvent del botón.
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;
}
}
Luego, agregué un EventListener llamado TableButtonListener para manejar el evento del botón de la siguiente manera.
public interface TableButtonListener extends EventListener {
public void tableButtonClicked( int row, int col );
}
Y use Renderer / Editor arriba.
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 desea mostrar la etiqueta de cada botón para cada fila, debe insertar el bloque de código en getTableCellRendererComponent y getTableCellEditorComponent, que debe modificar la etiqueta del botón.
editar: Código compila ahora. Error de horquillado en el constructor TableButton corregido.
Table Button Column da un enfoque.