了解如何将JButton添加到JTable

时间:2018-01-05 13:38:02

标签: java swing jtable jbutton

我正在尝试在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。

2 个答案:

答案 0 :(得分:3)

此处的DefaultCellEditor用法更像是使用按钮的黑客,因为它只接受JCheckBoxJComboBoxJTextField

如果你真的想要为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 DefaultCellEditorDefaultCellEditor的构造函数看起来像DefaultCellEditor​(JCheckBox checkBox)