Удалить строку jTable с помощью jButton, используя cellEditor ();

Применение границы к элементам, зависающим для увеличения их площади, делает трюк. Если вы идете по этому маршруту, вам также нужно применить отрицательный запас при падении, чтобы сохранить элементы на месте.

#text {
  cursor: pointer;
  font-size: 7em;
  font-weight: 700;
  text-transform: uppercase;
  span {
    display: inline-block;
  transition: transform 200ms;
    &:hover {
      transform: translateY(-1em) rotate(10deg) scale(1.5);
      border: 0.3em solid transparent;
      margin: -0.3em;
    }
  }
}
1
задан TT. 19 January 2019 в 03:04
поделиться

1 ответ

Мы можем сделать это, как в примере ниже. Мы можем написать собственный редактор рендерера +, который просто возвращает JButton как компонент рендерера / редактора. Обратите внимание, что индекс строки хранится в поле в редакторе.

import javax.swing.*;
import javax.swing.event.CellEditorListener;
import javax.swing.table.*;
import java.awt.Component;
import java.awt.event.*;
import java.util.EventObject;

public class ButtonInTable {

  public static void main(String[] args) {

    DefaultTableModel tableModel = new DefaultTableModel(
        new Object[][] {
            {"aa", "aaa", ""},
            {"bb", "bbb", ""},
            {"cc", "ccc", ""},
            {"dd", "ddd", ""},
            {"ee", "eee", ""}},
        new Object[] {"Column 1", "Column 2", " "});
    JTable table = new JTable(tableModel);
    table.getColumn(" ").setCellRenderer(new RendererAndEditor(table));
    table.getColumn(" ").setCellEditor(new RendererAndEditor(table));

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(new JScrollPane(table));
    f.setBounds(300, 200, 400, 300);
    f.setVisible(true);
  }
}

class RendererAndEditor implements TableCellRenderer, TableCellEditor {

  private JButton button;
  private int row;

  RendererAndEditor(JTable table) {
    button = new JButton("Delete");
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
        tableModel.removeRow(row);
      }
    });
  }

  @Override
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                                                 boolean hasFocus, int row, int column) {
    return button;
  }

  @Override
  public java.awt.Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row,
                                                        int column) {
    this.row = row;
    return button;
  }

  @Override
  public Object getCellEditorValue() {
    return null;
  }

  @Override
  public boolean isCellEditable(EventObject anEvent) {
    return true;
  }

  @Override
  public boolean shouldSelectCell(EventObject anEvent) {
    return true;
  }

  @Override
  public boolean stopCellEditing() {
    return true;
  }

  @Override
  public void cancelCellEditing() { }

  @Override
  public void addCellEditorListener(CellEditorListener l) { }

  @Override
  public void removeCellEditorListener(CellEditorListener l) { }
}
0
ответ дан Prasad Karunagoda 19 January 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: