簡體   English   中英

更新單元格值(JTable)

[英]Updating Cell Value (JTable)

我在更新JTable的單元格值時遇到了問題。 我想要做的是從JTable中選擇一個特定的單元后,我應該能夠編輯並且操作必須反映后端的數據庫。 我正在使用HSQL。 我的表有4列,一個PK。 請給我一個替代方案和/或通過替換* s為我提供一些代碼。 我剛開始新手。

d_view.addActionListener(new ActionListener() { //----action listener of a button
    public void actionPerformed(ActionEvent po) {
        try {
            Connection connec;
            Class.forName("org.hsqldb.jdbcDriver");
            connec = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/","SA", "");
            java.sql.Statement stt=connec.createStatement();
            ResultSet rs=stt.executeQuery("select * from DepReg");//----------TO VIEW DATA IN TABULAR FORMAT
            ResultSetMetaData rt=rs.getMetaData();
            int cols=rt.getColumnCount();
            String c[] =new String[cols];
            for(int i=0;i<cols;i++){
                c[i]=rt.getColumnName(i+1);
                dm.addColumn(c[i]);
            }
              Object row[]=new Object[cols];
                while(rs.next()){
                     for(int i=0;i<cols;i++){
                            row[i]=rs.getString(i+1);
                        }
                    dm.addRow(row);
                }
                table.setModel(dm);
                connec.close();
            }
        catch (Exception ty) {}
    }
});//--------HERE THE PROBLEM STARTS
table.getModel().addTableModelListener(new TableModelListener() {
    public void tableChanged(TableModelEvent tme) {
        int rows=tme.getFirstRow();
        int colms=tme.getColumn();
        TableModel model=(TableModel)tme.getSource();
        String colname=model.getColumnName(colms);
        Object data=model.getValueAt(rows, colms);
//*********EDIT/REPLACE THE CODE ***************//
        try {
            Connection connec;
            Class.forName("org.hsqldb.jdbcDriver");
            connec = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/","SA", "");
            java.sql.Statement stt=connec.createStatement();
//-----------I WILL INCLUDE AN UPDATE STATEMENT OVER HERE BASED ON THE VALUE SELECTED
        }
        catch (Exception ae) {}
        }
});
  • 事件調度線程不應該發生數據庫連接。 它們太慢了。 將其移至后台線程。 有關更多信息,請參閱Swing並發教程
  • 我不完全清楚你是否已經能夠編輯你的表,但如果沒有,這是通過在TableModel中確保isCellEditable方法為你想要編輯的單元格返回true並且你已經設置了一個TableCellEditor在您的JTable
  • 我不會添加TableModelListener來更新數據庫,而是將該邏輯移動到自定義TableModel 每次調用setValueAt方法時,您都知道已經進行了更改。 然后,您可以更新數據庫(同樣,不在事件調度線程上)。
  • 如果數據庫也可以從其他地方更新,您可能希望在某些時刻輪詢數據庫以更新TableModel以反映數據庫的最新狀態。 確保在工作線程上進行輪詢。 然后,您可以在工作線程上創建一個全新的TableModel ,並在Event Dispatch Thread上替換表的TableModel 或者您可以更新EDT上的現有模型(不要忘記觸發事件,或者如果您的模型從DefaultTableModel / AbstractTableModel擴展,則可以使用可用的API)。

我還建議閱讀Swing表教程以獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM