当前位置: 首页 > 知识库问答 >
问题:

正在从DefaultTableModel对象中删除行

窦凯定
2023-03-14

但仍然无法修复。我的目的是当用户在组合框中选择delete选项时,我只想完全删除该行。顺便说一下,removeRow()方法可以在侦听器外部正常工作。下面是代码和说明:

String[] columnNames = {"Kargo ID",
                "Alıcı Adres",
                "Ağırlık(KG)",
                "Tutar(TL)",
                "Alım Saati","Durum","İletim Saati"};

        Object[][] data = {
                {new Integer(3), "Sinan Caddesi",
                    new Integer(100), new Integer(5),"" ,"",""}};



        final DefaultTableModel dtm = new DefaultTableModel(data,columnNames);
        final JTable table = new JTable(dtm){
            @Override
            public boolean isCellEditable(int row, int column) {
                return column == 5;//Combobox column
            }

        };

        //Making Combobox
        TableColumn c = table.getColumnModel().getColumn(5);
        JComboBox comboBox = new JComboBox();
        comboBox.addItem("");
        comboBox.addItem("Delete");

        c.setCellEditor(new DefaultCellEditor(comboBox));

        //System.out.println(dtm.getRowCount());
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        table.setFillsViewportHeight(false);

        //I printed row and column numbers, they re correct. 
        dtm.addTableModelListener(new TableModelListener() {

            @Override
            public void tableChanged(TableModelEvent e) {
                int row = e.getFirstRow();
                int column = e.getColumn();
                DefaultTableModel model = (DefaultTableModel)e.getSource();
                Object data = model.getValueAt(row, column);
                //System.out.println(data); DATA IS CORRECT
                if(((String)data).equals("Delete"))
                    dtm.removeRow(row);//Exception Here

                //System.out.println(row + " " + column);
            }
        });

我是不是漏了什么重要的地方?如有任何帮助,我们将不胜感激。

共有1个答案

徐俊人
2023-03-14

“非常”的基本思想是,当调用TableModel#setvalue时,您希望检查被修改的。如果column是(在本例中)5,您将希望检查值是什么...

例如...

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    if (columnIndex == 5) {
        if ("Delete".equals(aValue)) {
            removeRow(rowIndex);
        }
    }
}

请记住,上面的示例覆盖了setvalueat的默认行为,因此如果您依赖于模型中要更新的值,则需要调用super.setvalueat(...)

 类似资料:
  • 这是我的DAO方法: 这是我的控制器: 当我试图删除到对象时,删除分离的实例时出错。 我在合并前后做了sysout,都是false,但我不知道为什么。为什么我的对象仍然是分离的? 在stackTrace之前,我有这样的消息: KWI21, 2016 10:47:45AMorg.apache.catalina.core.Standard ardWrapperValve在路径[/zapisywacz.

  • 问题内容: 我正在尝试从ArrayList中删除一个对象。每个Item对象都有3个属性;1. itemNum 2.信息3.费用。我也有3个类,即1。Item类定义了存储在目录中的单个项目。2. Catalog类维护Item对象的列表。3带main方法的客户端类。我在Set类中具有设置并获取,在Catalog中具有ArrayList。在客户端中,提示我“输入要删除的itemNum。如何基于对item

  • 问题内容: 我有一个具有静态对象ArrayList的ClassA 现在,我要像这样从此列表中删除一个对象 这是用Meteorit类编写的。但是,当我想使用ArrayList中的对象时,它将引发异常。 我使用Iterator从ArrayList中删除对象,但是现在我不知道如何在这种情况下使用它。 问题答案: 这是因为某个线程实际上正在for每个循环中查看此列表,也许您正在尝试在for-each主体中

  • 问题内容: 如果我需要从List中删除一个对象(假设字符串“ abc” linkedList或ArrayList),则可以删除哪一个?(我认为两者都是相同的) ,如果我使用Linkedlist和arraylist,那么时间和空间的复杂度是多少 (我相信两者的时间复杂度都为O(n)相同) 问题答案: 两者都具有相同的时间复杂度-O(n),但是恕我直言,该版本会更快,尤其是在大型列表中,因为当您从数组

  • 问题内容: 我对JavaScript的运算符有些困惑。采取以下代码: 执行完这段代码后,is ,但仍指与完全相同的对象。我猜这个对象是指向相同的对象。 这使我感到困惑,因为我希望写操作可以删除指向内存中的对象,而不仅仅是变量。 这是因为JavaScript的垃圾回收工作在保留/释放的基础,所以,如果我没有指向对象的任何其他变量,它 会 从内存中清除? (顺便说一下,我的测试是在Safari 4中完

  • 我不确定是什么导致了这个例外。