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?Cómo agregar el botón en una fila de JTable en Swing java
Respuesta
No lo agrega a una fila; lo agrega a la celda. This tutorial describe lo que necesita.
Table Button Column dar un enfoque.
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 anteriormente Renderer/Editor.
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 del botón diferente para cada fila, se debe colocar el bloque de código en el getTableCellRendererComponent y getTableCellEditorComponent que es modificar la etiqueta del botón.
editar: El código compila ahora. Error de horquillado en el constructor de TableButton corregido.
Gracias xrath por ayuda –
-1 esta es una implementación ilegal de CellEditor: por contrato, debe notificar a CellEditorListeners registrados. Lo que trivialmente no funciona con la implementación vacía de addEditorListener ;-) Los supercontratos _deben_ ser atendidos por implementaciones, de ninguna manera. – kleopatra
Lo probé y obtuve .... variable indefinida 'oyente' ... ¿qué es eso? :( – gumuruh
- 1. ¿Cómo agregar una fila en JTable?
- 2. Java Swing: Jtable ArrayIndexOutOfBoundsException
- 3. Java Swing: ¿encabezados de columna múltiples en una JTable?
- 4. Swing JTable update
- 5. Cómo hacer una columnas en JTable Invisible para Swing Java
- 6. Colores del botón Java Swing
- 7. Cómo agregar emoticonos en java swing?
- 8. Mover una fila de JTable
- 9. Agregar elementos a JList en Swing Java
- 10. Seleccionar mediante programación una fila en JTable
- 11. ¿Cómo eliminar una fila de JTable?
- 12. Java Swing JTable; Haga clic con el botón derecho en el menú (¿Cómo lo hago para "seleccionar" también resaltar la fila)
- 13. Cómo agregar información sobre herramientas a las filas de JTable
- 14. Java - Swing - JTable - Establecer color para la fila seleccionada, pero no la celda
- 15. java swing dinámicamente agregar componentes
- 16. Cómo agregar un botón a cada fila de una lista?
- 17. Cómo desplazarse a la última fila en una JTable
- 18. Cómo establecer un objeto personalizado en una fila JTable
- 19. Agregar un botón a una fila en jqgrid
- 20. Java: cómo seleccionar una sola celda en una JTable y no toda la fila
- 21. JAVA - Validación en JTable
- 22. Swing JTable - Resalta la celda seleccionada en un color diferente del resto de la fila seleccionada?
- 23. Agregar filas a una JTable
- 24. JTable encabezado de fila Implementación
- 25. ¿Cómo hacer una fila JTable a un estado "no seleccionado" después de seleccionar cualquier fila en esa tabla?
- 26. ¿Cómo agregar dinámicamente una fila en una tabla en JSF?
- 27. JTable con un botón "Cerrar" en el encabezado de columna
- 28. Haga clic en evento en jTable -Java
- 29. JTable fila hightlighter basado en el valor de TableCell
- 30. Scroll un JScrollPane a una fila específica en un JTable
bien, gracias Droidln.net –
No hay necesidad de agradecer, simplemente marque la marca :) – Bostone
waw! Acabo de abrir ese ejemplo y me di cuenta de que el código fuente agregaba una "nueva JCheckbox" al CellEditor. Pero en realidad se representa como JButton. De todos modos, mi pregunta es, ¿por qué deberíamos poner JCheckBox en eso? :( – gumuruh