2

I have created Swing GUI in Eclipse, where i have two JTables and method tableChanged. In this method i need read data from table, when i edit some cell in table and send it to logical layer of my project. Problem is how to identify table ,which calls this method and then use right JSON structure for row of edited table and send it.

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);

tableChanged mehod:

    @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!");
        }
    }   
1000Bugy
  • 105
  • 1
  • 8
  • You will need to check the `TableModel` of each `JTable` against the `TableModel` which generated the event. You could also create a "basic"/"common" `TableModelListener`, which could take a reference to a `Table`, so any time it was triggered, it knew which table it was associated with – MadProgrammer Dec 20 '15 at 22:43

1 Answers1

3

If your TableModel extends AbstractTableModel, you can use getTableModelListeners() to identify the listening JTable. The listener below invokes the getName() method of the parent Component, but a JComponent client property might offer more latitude.

@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());
        }
    }
}
trashgod
  • 203,806
  • 29
  • 246
  • 1,045