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

时间:2013-04-11 10:01:11

标签: java swing nullpointerexception jtable tablecelleditor

我有一个框架,其中包含从数据库中获取要素的表格(与搜索对应的要素)。这是表格:

 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

                }
            });

但是我得到了这个例外:

  

单元格编辑器为空

我不知道如何申报,究竟在哪里?请帮忙。

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)

1 个答案:

答案 0 :(得分:2)

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

  • 什么是CellEditorListener可能不会在没有最深入了解Java,Swing,JTable和XxxTableCelEditor的情况下使用代码


可能的情况

  • 永远不会打开执行关闭在这种情况下飞行连接(长和硬对象),可以在工作线程的背景上打开连接(根本没有重要的EDT)和JTable

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

  • 在Editort为XxxTableModel添加新值之前,JTable不会返回上一个值

  • 更好的方法是使用AbstractTableModel,然后你将从setValueAt()中激活另一个后台任务,使用SwingWorker(用于享受)或Runnable #Thread(用于生产代码),请你可以完全忽略我的最后两个内部通信(....)


  • 我认为必须存在AbstractTableModel并且ResultSet.CONCUR_UPDATABLE直接在模型中实现方法