swing表格添加按钮及其监视器
时间: 2023-09-06 07:13:11 浏览: 92
swing 的查看器
要在 Swing 表格中添加按钮及其监视器,可以使用 TableCellRenderer 和 TableCellEditor 接口来实现。以下是一个简单的示例:
```java
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
public class ButtonTableExample extends JFrame {
private JTable table;
public ButtonTableExample() {
super("Button Table Example");
// 创建表格数据
Object[][] data = {
{"John", "Doe", new JButton("Edit")},
{"Jane", "Doe", new JButton("Edit")}
};
// 创建表格列名
String[] columnNames = {"First Name", "Last Name", "Action"};
// 创建表格模型
DefaultTableModel model = new DefaultTableModel(data, columnNames);
// 创建表格
table = new JTable(model);
// 设置按钮列的渲染器和编辑器
table.getColumn("Action").setCellRenderer(new ButtonRenderer());
table.getColumn("Action").setCellEditor(new ButtonEditor(new JCheckBox()));
// 将表格添加到框架
add(new JScrollPane(table));
// 设置框架大小和可见性
setSize(400, 300);
setVisible(true);
}
// 自定义按钮渲染器
class ButtonRenderer extends JButton implements TableCellRenderer {
public ButtonRenderer() {
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText((value == null) ? "" : value.toString());
return this;
}
}
// 自定义按钮编辑器
class ButtonEditor extends DefaultCellEditor {
protected JButton button;
private String label;
private boolean isPushed;
public ButtonEditor(JCheckBox checkBox) {
super(checkBox);
button = new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
});
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if (isSelected) {
button.setForeground(table.getSelectionForeground());
button.setBackground(table.getSelectionBackground());
} else {
button.setForeground(table.getForeground());
button.setBackground(table.getBackground());
}
label = (value == null) ? "" : value.toString();
button.setText(label);
isPushed = true;
return button;
}
public Object getCellEditorValue() {
if (isPushed) {
// 执行按钮操作
// TODO: 添加按钮监视器的代码
System.out.println(label + " is clicked!");
}
isPushed = false;
return label;
}
public boolean stopCellEditing() {
isPushed = false;
return super.stopCellEditing();
}
protected void fireEditingStopped() {
super.fireEditingStopped();
}
}
public static void main(String[] args) {
new ButtonTableExample();
}
}
```
这个示例创建了一个表格,其中包含一个“Action”列,其中的每个单元格都包含一个“Edit”按钮。按钮列的渲染器和编辑器都是自定义的,它们可以根据需要进行修改。在按钮编辑器中,可以添加按钮监视器的代码来执行所需的操作。
阅读全文