filas dinamicamente agregar addrow java swing jtable

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.