JTable中设置多个按钮,并且启用/禁用相应按钮
时间: 2024-01-17 20:03:18 浏览: 225
您可以在JTable中添加多个按钮,可以使用自定义的TableCellRenderer和TableCellEditor来实现。
以下是一个简单的示例,其中有两个按钮:编辑和删除。当选择一行时,编辑按钮将启用,删除按钮将禁用。当没有选择行时,编辑和删除按钮都将被禁用。
```
import javax.swing.*;
import javax.swing.table.*;
public class ButtonTableExample extends JFrame {
public ButtonTableExample() {
// 创建表格模型
DefaultTableModel model = new DefaultTableModel(new Object[][] {
{"John", "Doe", "Edit", "Delete"},
{"Jane", "Doe", "Edit", "Delete"},
{"Bob", "Smith", "Edit", "Delete"}
}, new Object[] {
"First Name", "Last Name", "", ""
});
// 创建表格
JTable table = new JTable(model);
// 创建编辑按钮
JButton editButton = new JButton("Edit");
editButton.setEnabled(false);
// 创建删除按钮
JButton deleteButton = new JButton("Delete");
deleteButton.setEnabled(false);
// 设置表格的单元格编辑器和渲染器
table.getColumnModel().getColumn(2).setCellRenderer(new ButtonRenderer());
table.getColumnModel().getColumn(2).setCellEditor(new ButtonEditor(editButton));
table.getColumnModel().getColumn(3).setCellRenderer(new ButtonRenderer());
table.getColumnModel().getColumn(3).setCellEditor(new ButtonEditor(deleteButton));
// 添加选择监听器,用于启用/禁用按钮
table.getSelectionModel().addListSelectionListener(e -> {
editButton.setEnabled(table.getSelectedRow() != -1);
deleteButton.setEnabled(table.getSelectedRow() != -1);
});
// 添加表格到窗口
getContentPane().add(new JScrollPane(table));
// 添加编辑和删除按钮到窗口
JPanel buttonPanel = new JPanel();
buttonPanel.add(editButton);
buttonPanel.add(deleteButton);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
// 设置窗口大小和可见性
setSize(400, 300);
setVisible(true);
}
public static void main(String[] args) {
new ButtonTableExample();
}
}
// 自定义的单元格渲染器,用于渲染按钮
class ButtonRenderer extends DefaultTableCellRenderer {
private JButton button;
public ButtonRenderer() {
button = new JButton();
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
button.setText((value == null) ? "" : value.toString());
return button;
}
}
// 自定义的单元格编辑器,用于编辑按钮
class ButtonEditor extends DefaultCellEditor {
private JButton button;
public ButtonEditor(JButton button) {
super(button);
this.button = button;
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
button.setText((value == null) ? "" : value.toString());
return button;
}
}
```
在这个示例中,我们创建了一个表格模型,并将其用于创建一个JTable。然后,我们创建了两个按钮:编辑和删除。我们将这些按钮添加到表格的单元格编辑器和渲染器中,并为每个按钮创建一个自定义的TableCellRenderer和TableCellEditor。
我们还添加了一个选择监听器来启用/禁用按钮。当选择一行时,编辑和删除按钮将启用,否则它们将被禁用。最后,我们将表格和按钮添加到窗口中,并设置窗口的大小和可见性。
阅读全文