我在 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
。下面的监听器调用父 Component
的 getName()
方法,但 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/