如何在Swing java中的一行JTable中添加button

我已经做了一个具有一些行和列的JTable的graphics用户界面。如何添加一个button在一个JTable行?

你不要把它添加到一行 – 你把它添加到单元格。 本教程描述了您需要的内容。

您可以将组件添加为表格单元格。

首先,你应该实现一个JButton作为父类和两个接口TableCellRenderer和TableCellEditor的类。

应该实现TableCellEditor的原因是接收button的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; } } 

然后,我添加了一个名为TableButtonListener的EventListener来处理button事件,如下所示。

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

并使用上面的渲染器/编辑器。

 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); 

如果你想为每一行显示不同的button标签,你应该把代码块插入到getTableCellRendererComponent和getTableCellEditorComponent中去修改button的标签。

编辑:代码现在编译。 修复了TableButton构造函数中的包围错误。

表button列给出了一种方法。