【问题标题】:jtable checkbox checked row remove from table when click button?单击按钮时,jtable 复选框选中的行从表中删除?
【发布时间】:2014-02-18 15:59:28
【问题描述】:

下面的代码是我的按钮操作的一部分。Jtable 包含最后一行是复选框。 当我点击保存按钮时,所选行必须从表行中删除...!!!'

动作执行代码

@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnSave){
    for (int i = 0; i < retunTable.getRowCount(); i++) {
        Boolean chked = Boolean.valueOf(retunTable.getValueAt(i, 4)
                .toString());
        String dataCol1 = retunTable.getValueAt(i, 1).toString();
        if (chked) {


            JOptionPane.showMessageDialog(null, dataCol1);
            colVaules.add(dataCol1);
            returnBook();
            DefaultTableModel dm=(DefaultTableModel) retunTable.getModel();


        }
    }
}

}

【问题讨论】:

  • 您实际上在哪里尝试删除该行?你试过dm.removeRow(i)吗?那么所有!!! 是怎么回事?
  • 不,但我需要知道检查按钮检查的行号才能尝试该代码
  • “不,但我需要知道检查按钮检查的行号以尝试该代码” 这不是循环的目的,循环遍历行,@987654324 @ 是行吗?
  • 如果您还没有弄清楚,请参阅下面的答案。

标签: java swing jtable defaulttablemodel


【解决方案1】:

试试这个。你的班级应该已经覆盖了模型的getColumnClass(),所以不需要你尝试做的toString()getValueAt() 应该返回一个可转换的 Boolean 对象。此外,如果您要在循环中动态循环和删除行,您需要考虑到模型的行数会随着每次删除行而减少,因此每次删除行时还需要i--。请参见下面的示例。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class TestCheckedTable {

    public TestCheckedTable() {
        String[] cols = {"col 1", "col 2", "col 3"};
        Object[][] data = new Object[15][];
        for (int i = 0; i < data.length; i++) {
            data[i] = new Object[]{"Hello", "World", false};
        }

        final DefaultTableModel model = new DefaultTableModel(data, cols) {
            @Override
            public Class<?> getColumnClass(int col) {
                return col == 2 ? Boolean.class : String.class;
            }
        };
        JTable table = new JTable(model);

        JButton button = new JButton("Delete Checked Rows");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                for (int i = 0; i < model.getRowCount(); i++) {
                    Boolean checked = (Boolean) model.getValueAt(i, 2);
                    if (checked) {
                        model.removeRow(i);
                        i--;
                    }
                }
            }
        });

        JFrame frame = new JFrame("test");
        frame.add(new JScrollPane(table));
        frame.add(button, BorderLayout.SOUTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TestCheckedTable();
            }

        });
    }
}

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 2019-03-22
    • 2012-05-13
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    相关资源
    最近更新 更多