当前位置: 首页 > 面试题库 >

JTable:检测单元格数据更改

江瀚昂
2023-03-14
问题内容

在Netbeans中,我使用了GUI Builder将JTable插入到我的应用程序中。

到目前为止,我只有一个类(CustomerDB):

package CustomerDB;

import [...];

public class CustomerDB extends javax.swing.JFrame {

    CellEditorListener ChangeNotification = new CellEditorListener() {
        public void editingCanceled(ChangeEvent e) {
            System.out.println("The user canceled editing.");
        }

        public void editingStopped(ChangeEvent e) {
            System.out.println("The user stopped editing successfully.");
        }
    };

    public CustomerDB() {
        customerTable = new javax.swing.JTable();
        customerTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "ID", "Name", "Address", "Phone"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        customerTable.getDefaultEditor(String.class).addCellEditorListener(ChangeNotification);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CustomerDB().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    [...]
    private javax.swing.JTable customerTable;
    [...]
    // End of variables declaration

}

每当用户更改表中的数据时,我都希望获取该单元格的旧值(可选)和新值。

为了获取此数据,我尝试实现一个事件侦听器:

    CellEditorListener ChangeNotification = new CellEditorListener() {
        public void editingCanceled(ChangeEvent e) {
            System.out.println("The user canceled editing.");
        }

        public void editingStopped(ChangeEvent e) {
            System.out.println("The user stopped editing successfully.");
        }
    };

然后,将此CellEditorListener分配给表(其单元格编辑器):

    customerTable.getDefaultEditor(String.class).addCellEditorListener(ChangeNotification);

到目前为止,该方法有效。 但这还无法使我检测到此单元格的旧值和新值。我还需要做什么?

提前非常感谢您!


问题答案:

但这还无法使我检测到此单元格的旧值和新值。我还需要做什么?

使用TableModelListener监听更改会更容易,但是仍然存在无法访问旧值的问题。

请查看表单元侦听器,以获取可访问“旧值”和“新值”的解决方案。



 类似资料:
  • 我有一个jtable保存账本文件记录并将它们发送出去。

  • 我有一个问题,我无法解决单独和帮助其他话题在那里。找到了一些相似的,但它没有帮助。 我的问题有点棘手,我想,我会尽力解释清楚。 因此,我得到了一个包含两列的JTable,列2和列3是可编辑的,列4是这两个列的乘积(col4=col2*col3)。我要做的是,当我编辑第2或第3列时,第4列将自动更新它的值。我理解这一点,但不完全理解。只有当我完成MouseClick编辑时单元格才会更新。如果编辑是通

  • 问题内容: 我想制作一个可编辑的表,然后检查数据以确保其有效。我不确定如何仅更改一个单元格的颜色。我想要一个单元格,例如(0,0)并将前景颜色设置为红色。我已经阅读了SO和Oracle上有关自定义ColorRenderer的其他文章,但是我不知道如何使用它。 谢谢。 问题答案: 假设您要用其他颜色渲染的单元格代表一种状态(我将以“拒绝并批准”为例)。然后,我将在我的表模型中实现一个名为getSta

  • 问题内容: 我试图使自己熟悉JTables,TableModels,JTableHeaders,渲染器等。我试图制作一个简单的虚拟表(出于练习目的),看起来像这样: 我还希望B2单元格-并且只有该单元格-具有蓝色(Color.BLUE)背景-所有其他单元格都可以具有自动分配的Swing默认颜色。 我的代码在下面,并且基于我在本网站和整个互联网上发现的无数示例。但是我没有得到想要的结果。相反,我得到

  • 这听起来可能有点奇怪,但解释我的问题的最好方法就是如标题所述。 我有一个JTable,它使用自定义Tablemodel,在这个Tablemodel我有不同的方法。 我需要一种方法,当我在Tablemodel中调用一个特定的方法时,转到它被添加到的表,并更改位置(X,Y)单元格的背景颜色。 我可以从Tablemodel访问JTable对象。 为了澄清这个问题,有一个使用特定Tablemodel的JT

  • 我一直在试图找到一种通过直接输入来更新我的细胞的方法。从我的研究来看,每个人似乎都说你必须使用 尽管如此,它还是让我投myJTable-- 以下是我当前的表代码,如果这有帮助的话: 我怎么可能从用户直接输入更新的单元格中保存数据?谢谢!