swing表格添加按钮及其监视器
时间: 2023-09-04 14:11:52 浏览: 95
swing 的查看器
要在Swing表格中添加按钮并监视它们的操作,可以使用表格中的单元格渲染器和编辑器。下面是一个简单的示例,演示如何在表格中添加按钮:
```java
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonTableExample extends JFrame {
private JTable table;
public ButtonTableExample() {
// 创建表格数据模型和列名
Object[][] data = {
{"张三", "男", "20", "编辑"},
{"李四", "女", "22", "编辑"},
{"王五", "男", "25", "编辑"},
};
String[] columnNames = {"姓名", "性别", "年龄", "操作"};
// 创建表格
table = new JTable(data, columnNames);
// 设置操作列的单元格渲染器和编辑器
table.getColumn("操作").setCellRenderer(new ButtonRenderer());
table.getColumn("操作").setCellEditor(new ButtonEditor(new JCheckBox()));
// 将表格添加到窗口
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane);
// 设置窗口属性
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Button Table Example");
setSize(400, 300);
setLocationRelativeTo(null);
setVisible(true);
}
// 自定义单元格渲染器:将按钮作为单元格内容
class ButtonRenderer extends JButton implements TableCellRenderer {
public ButtonRenderer() {
setOpaque(true);
}
@Override
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 {
private JButton button;
public ButtonEditor(JCheckBox checkBox) {
super(checkBox);
button = new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 处理按钮点击事件
fireEditingStopped();
JOptionPane.showMessageDialog(ButtonEditor.this, "编辑按钮被点击");
}
});
}
@Override
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());
}
button.setText((value == null) ? "" : value.toString());
return button;
}
@Override
public Object getCellEditorValue() {
return button.getText();
}
}
public static void main(String[] args) {
new ButtonTableExample();
}
}
```
在上面的示例中,我们自定义了一个`ButtonRenderer`类作为单元格渲染器,将按钮作为单元格内容,以便在表格中显示按钮。我们还自定义了一个`ButtonEditor`类作为单元格编辑器,将按钮作为单元格编辑器,以便在单元格中编辑按钮。在`ButtonEditor`类中,我们为按钮添加了一个`ActionListener`,以便在按钮被点击时执行相应的操作。最后,我们在`main`方法中创建一个`ButtonTableExample`窗口,将表格添加到窗口中,并显示窗口。
阅读全文