Reputation: 105
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
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