java - 如何在TableModelEvent中获取JTable

标签 java swing events jtable tablemodel

我在 Eclipse 中创建了 Swing GUI,其中有两个 JTable 和 tableChanged 方法。在这种方法中,当我编辑表中的某些单元格并将其发送到项目的逻辑层时,我需要从表中读取数据。问题是如何识别表,它调用此方法,然后对编辑表的行使用正确的 JSON 结构并将其发送。

JTable1:

    Object[] columns = {"ID","Jmeno","Prijmeni","Narozeni","Pozice"};
    JTable userTable = new JTable(new DefaultTableModel(columns, 0));
    scrollPane.setViewportView(userTable);
    userTable.setCellSelectionEnabled(true);
    userTable.setColumnSelectionAllowed(true);
    updateUser();
    userTable.getModel().addTableModelListener((TableModelListener) this);

JTable2:

    Object[] columns = {"EAN","Cena","Nazev","Oddeleni","Sk.Podminky","VytvorenoUzivatelem"};   
    JTable zboziTable = new JTable(new DefaultTableModel(columns, 0));
    scrollPane.setViewportView(zboziTable);
    userTable.setCellSelectionEnabled(true);
    userTable.setColumnSelectionAllowed(true);
    updateZbozi();
    zboziTable.getModel().addTableModelListener((TableModelListener) this);

表更改方法:

    @Override
    public void tableChanged(TableModelEvent e)
    {
        int row          = e.getFirstRow();
        int column       = e.getColumn();
        TableModel model = (TableModel)e.getSource();
        String[] data    = new String[model.getColumnCount()];

        if(column >= 0)
        {
            if(!model.getValueAt(row, column).toString().equals(""))
            {
                for (int i = 0; i < data.length; i++)
                {
                    data[i] = model.getValueAt(row, i).toString();
                }
                //here is JSON structure for userTable
                String jsonData =  "{\"ID\": \"" + data[0] + "\", \"Jmeno\": \"" +  data[1] + "\", \"Prijmeni\": \"" +  data[2] + "\", \"Datum_Narozeni\": \"" + data[3] + "\", \"Pozice\": \"" + data[4] + "\"}";
                WebTarget target = client.target("http://localhost:8080/WSdemo/obchod/editUser");
                target.request().post(Entity.entity(jsonData, MediaType.APPLICATION_JSON),String.class);
            }
            else
                System.out.print("Enter valid text!");
        }
    }   

最佳答案

如果您的 TableModel 扩展 AbstractTableModel ,您可以使用getTableModelListeners()来识别监听的JTable。下面的监听器调用父 ComponentgetName() 方法,但 JComponent 客户端属性可能提供更多自由度。

@Override
public void tableChanged(TableModelEvent e) {
    AbstractTableModel model = (AbstractTableModel) e.getSource();
    TableModelListener[] listeners = model.getTableModelListeners();
    for (TableModelListener listener : listeners) {
        if (listener instanceof JTable) {
            System.out.println(((JTable)listener).getName());
        }
    }
}

关于java - 如何在TableModelEvent中获取JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34386676/

相关文章:

java - 在 javac 中强制执行包声明检查

java - 尝试在Java中仅打印输入单词中的每个字符一次

java - JSP各种jsp特性的执行顺序

java - 与无文本字段的按键事件同时更新文本字段

java - 创建一个带有 Swing 提交按钮的表单面板

java - 使用存储在堆栈中的对象的方法 (javafx)

java - 在Thread算法工作期间重绘JPanel

java - 线程 "AWT-EventQueue-0"java.lang.NoClassDefFoundError 中的异常

c# - 事件未显示在属性网格中

android - 捕获Intent.ACTION_MEDIA_BUTTON事件