我正在尝试在JTable中实现一些按钮。我一直在看 this example
我不明白的是这个构造函数:
public ButtonEditor(JCheckBox checkBox) {
super(checkBox);
button = new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
});
}
JCheckBox与任何东西有什么关系?没有JCheckBox显示在任何地方,也没有看起来甚至与示例相关。 TIA。
答案 0 :(得分:3)
此处的DefaultCellEditor
用法更像是使用按钮的黑客,因为它只接受JCheckBox
,JComboBox
和JTextField
。
如果你真的想要为JButton
实施,你也可以这样做,
class ButtonEditor extends AbstractCellEditor
implements javax.swing.table.TableCellEditor,
javax.swing.tree.TreeCellEditor
否则,您可以使用JButton
作为参数或默认构造函数的构造函数更新实现,
方法1
public ButtonEditor() {
super(new JCheckBox());
button = new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
});
}
可以访问,
table.getColumn("Button").setCellEditor(
new ButtonEditor());
方法2
public ButtonEditor(JButton button) {
super(new JCheckBox());
this.button = button;
button.setOpaque(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
});
}
这种方法也可以在单元格编辑器之外更清晰地使用按钮组件,
JButton button=new JButton();
table.getColumn("Button").setCellEditor(
new ButtonEditor(button));
答案 1 :(得分:1)
这是因为您的示例中的class ButtonEditor extends DefaultCellEditor
和DefaultCellEditor
的构造函数看起来像DefaultCellEditor(JCheckBox checkBox)