使用 cellEditor() 删除带有 jButton 的 jTable 行;

我想在列内添加 jButton,然后使用添加的 jButton 删除行我已经尝试了一些 stackoverflow 问题并具有以下代码,但这并没有删除一行。


public class NewJFrame extends javax.swing.JFrame {


    JButton jb = new JButton();


    public NewJFrame() {

        initComponents();


        jTable.getColumn(" ").setCellRenderer(new TableCellRenderer() {

            @Override

            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

                jb.setText("Delete");

                return jb;

            }

        });


        jTable.getColumn(" ").setCellEditor(new TableCellEditor() {

            @Override

            public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {

                if (isSelected) {

                    jb.addActionListener(new ActionListener() {

                        @Override

                        public void actionPerformed(ActionEvent e) {

                             jTable = (JTable) e.getSource();

                        int modelRow = Integer.valueOf(e.getActionCommand());

                        ((DefaultTableModel) jTable.getModel()).removeRow(modelRow);

                        }

                    });

                }

                return jb;

            }


幕布斯6054654
浏览 156回答 1
1回答

慕虎7371278

我们可以像下面的示例程序那样做。我们可以编写一个自定义渲染器 + 编辑器,它只返回一个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) { }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java