кнопка добавления в ячейку в Jtable в NetBeans - PullRequest
1 голос
/ 29 ноября 2010

Как добавить кнопку в ячейку Jtable в netbeans ???

Ответы [ 3 ]

2 голосов
/ 29 ноября 2010

Столбец Кнопка Столбец показывает одну сторону.

0 голосов
/ 30 ноября 2010

Как показано в примере таблицы кнопок , мы создадим класс, который расширяет JButton и реализует TableCellRenderer.

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;
  }
}

Затем необходимо создать редактор ячеек для столбца.

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 в качестве редактора ячейки.

\\"Button" is the column name
table.getColumn("Button").setCellRenderer(new ButtonRenderer());
table.getColumn("Button").setCellEditor(
    new ButtonEditor(new JCheckBox()));

Пример в приведенной ссылке содержит полный исполняемый пример.

0 голосов
/ 29 ноября 2010

Вам нужно добавить пользовательский рендерер ячеек, перенастроить некоторые события из таблицы и перекрасить ячейку при изменении состояния кнопки.Это зло, это противно, но это можно сделать.

...