首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在netbeans中向Jtable中的单元格添加按钮

在netbeans中向Jtable中的单元格添加按钮
EN

Stack Overflow用户
提问于 2010-11-30 01:53:12
回答 3查看 9.7K关注 0票数 1

如何在netbeans的Jtable单元格中添加按钮?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-30 02:37:00

当按钮状态改变时,你需要添加自定义单元格渲染器,从表中重新定位一些事件,并重新绘制单元格。这是邪恶的,令人讨厌的,但这是可以做到的。

票数 0
EN

Stack Overflow用户

发布于 2010-11-30 02:07:33

Table Button Column展示了一种方法。

票数 2
EN

Stack Overflow用户

发布于 2010-11-30 17:52:10

Button Table Example所示,我们将创建一个扩展JButton并实现TableCellRenderer的类。

代码语言:javascript
运行
复制
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) {
    if (isSelected) {
      setForeground(table.getSelectionForeground());
      setBackground(table.getSelectionBackground());
    } else {
      setForeground(table.getForeground());
      setBackground(UIManager.getColor("Button.background"));
    }
    setText((value == null) ? "" : value.toString());
    return this;
  }
}

然后,还需要为该列创建一个单元格编辑器。

代码语言:javascript
运行
复制
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) {
      // 
      // 
      JOptionPane.showMessageDialog(button, label + ": Ouch!");
      // System.out.println(label + ": Ouch!");
    }
    isPushed = false;
    return new String(label);
  }

  public boolean stopCellEditing() {
    isPushed = false;
    return super.stopCellEditing();
  }

  protected void fireEditingStopped() {
    super.fireEditingStopped();
  }
}

然后,我们将ButtonRender的一个实例设置为该列的单元格呈现,并将ButtonEditor的一个实例设置为单元格编辑器。

代码语言:javascript
运行
复制
\\"Button" is the column name
table.getColumn("Button").setCellRenderer(new ButtonRenderer());
table.getColumn("Button").setCellEditor(
    new ButtonEditor(new JCheckBox()));

所提供的链接中的example具有完整的可运行示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4306530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档