gpt4 book ai didi

java - 如何使用 Table CellEditor 编辑 Jtable 上的行

转载 作者:行者123 更新时间:2023-12-02 07:07:17 32 4
gpt4 key购买 nike

我有一个带有表格的框架,可以从数据库中获取特征(与搜索相对应的特征)。这是表格:

 public JTable getTableBornes() {
if(TableBornes==null){

TableModel TableBornesModel =
new DefaultTableModel(
new String[][] { { "", "", "" } },
new String[] { "Nom", "X", "Y" });
TableBornes = new JTable();

TableBornes.setModel(TableBornesModel);
TableBornes.setBorder(new LineBorder(new java.awt.Color(0,0,0), 1, false));
TableBornes.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

}
return TableBornes;

}

我想要做的是,当用户单击单元格并编辑它时,这也必须在数据库上完成。我尝试向 cellEditor 添加一个监听器,如下所示:

     addBornes.getTableBornes().getCellEditor()
.addCellEditorListener(new CellEditorListener() {

@Override
public void editingStopped(ChangeEvent e) {

try {
for (int i = 0; i < rowsToActOn().length; i++) {

String name = addBornes.getTableBornes()
.getValueAt(rowsToActOn()[i], 0)
.toString();
Double x = new Double(addBornes
.getTableBornes()
.getValueAt(rowsToActOn()[i], 1)
.toString());
Double y = new Double(addBornes
.getTableBornes()
.getValueAt(rowsToActOn()[i], 2)
.toString());

String updateQuery = "UPDATE bornes_salemed_valid SET x='"
+ x
+ "', y='"
+ y
+ "', name='"
+ name
+ "'";


PostgisDataStoreDriver postgisDataStore = (PostgisDataStoreDriver) context
.getWorkbenchContext()
.getRegistry()
.getEntries(
DataStoreDriver.REGISTRY_CLASSIFICATION)
.get(0);

java.sql.Connection connx = postgisDataStore
.getConn();
Statement st;
st = connx.createStatement();
st.executeUpdate(updateQuery);
connx.setAutoCommit(false);
connx.commit();
try {
refreshDataStoreLayerPlugin
.execute(context);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}

@Override
public void editingCanceled(ChangeEvent e) {
// TODO Auto-generated method stub

}
});

但是我遇到了这个异常:

the cell editor is null

我不知道如何声明它以及具体在哪里声明?请帮忙。

java.lang.NullPointerException
at com.vividsolutions.jump.workbench.ui.plugin.specific.ModifierBornesPlugIn.execute(ModifierBornesPlugIn.java:305)
at com.vividsolutions.jump.workbench.plugin.AbstractPlugIn$1.actionPerformed(AbstractPlugIn.java:130)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

最佳答案

  • 从此代码中删除所有有关数据库连接的代码

  • 如果对 Java、Swing、JTable 和 XxxTableCelEditor 没有最深入的了解,CellEditorListener 可能不会使用代码

<小时/>

可能的情况

  • 在这种情况下永远不要打开执行关闭连接(又长又硬的对象),连接可以与 JTable 一起在后台从工作线程(根本没有重要的 EDT)打开

  • 将 TableModelListener 添加到 JTable,返回上次编辑的单元格的正确坐标,

  • 在 Editort 向 XxxTableModel 提交新值之前,JTable 不会返回先前的值

  • 更好的是使用 AbstractTableModel,然后您将从 setValueAt() 触发另一个后台任务,使用 SwingWorker(用于享受)或 Runnable#Thread(用于生产代码),请您完全忽略我的最后两个内部通信网 (....)

<小时/>
  • 我认为必须存在 AbstractTableModel ,其中 ResultSet.CONCUR_UPDATABLE 直接作为模型中的方法实现

关于java - 如何使用 Table CellEditor 编辑 Jtable 上的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15945901/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com