亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 cellEditor() 刪除帶有 jButton 的 jTable 行;

使用 cellEditor() 刪除帶有 jButton 的 jTable 行;

幕布斯6054654 2022-05-12 16:44:55
我想在列內添加 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;            }
查看完整描述

1 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

我們可以像下面的示例程序那樣做。我們可以編寫一個自定義渲染器 + 編輯器,它只返回一個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) { }

}



查看完整回答
反對 回復 2022-05-12
  • 1 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號