1000Bugy
1000Bugy

Reputation: 105

How to get JTable in TableModelEvent

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!");
        }
    }   

Upvotes: 2

Views: 1763

Answers (1)

trashgod
trashgod

Reputation: 205785

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

Upvotes: 3

Related Questions