om.*_*om. 26 java swing jtable
我已经创建了一个带有JTable的swing GUI,其中有一些行和Columns.我应该如何在JTable中添加一个按钮?
小智 20
您可以将Component添加为表格单元格.
首先,您应该实现一个具有JButton作为父类的类和两个具有TableCellRenderer和TableCellEditor的接口.
应该实现TableCellEditor的原因是接收按钮的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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我添加了一个名为TableButtonListener的EventListener来处理按钮事件,如下所示.
public interface TableButtonListener extends EventListener {
public void tableButtonClicked( int row, int col );
}
Run Code Online (Sandbox Code Playgroud)
并使用上面的渲染器/编辑器.
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);
Run Code Online (Sandbox Code Playgroud)
如果要为每一行显示不同的按钮标签,则应将代码块插入到getTableCellRendererComponent和getTableCellEditorComponent中,即修改按钮的标签.
编辑:代码现在编译.TableButton构造函数中的包围错误已修复.
| 归档时间: |
|
| 查看次数: |
82078 次 |
| 最近记录: |