繁体   English   中英

TableModelListener并非始终有效

[英]TableModelListener not always working

我正在使用Java swing开发应用程序,在女巫中有一个jTable我是从数据库中导入数据的。我想直接从jTable更新我的数据库。所以基于我发现的代码(对不起,我不记得了链接)我设法使用TableModelListener做到了这一点,但是我发现一个小问题,只有在我不使用其他任何东西的情况下,我才能使用TableModelListener ,例如,如果我单击此按钮后我要返回更新,我有一个按钮巫婆会做任何事情表中的任何单元都没有发生任何事情,就像TableModelListener被停用了。如果我首先更新表,它会完美地工作,但是如果我在做其他事情之后更新它,那将无法工作。 这是我的代码的一部分(我的代码太长了),我试图解决此问题,但我无法

    public home() {

            initComponents();


            connection();

            jTable.getModel().addTableModelListener(new TableModelListener() {
                @Override
                public void tableChanged(TableModelEvent e) {
                    modiftable(e);
                }

            });


            if(jTable.getCellEditor()!=null)
            {
            jTable.getCellEditor().stopCellEditing();
            }


        }


 private void modiftable(TableModelEvent e) {
        if (e.getType() == TableModelEvent.UPDATE) {
            connection();
            home.model = (DefaultTableModel) ((TableModel) (e.getSource()));
            int fila = e.getFirstRow();
            int col = e.getColumn();
            String data = String.valueOf(home.model.getValueAt(jTable.getSelectedRow(), jTable.getSelectedColumn()));
            String rqt = "";
            String rqt2 = "";
            if (col == 1) {
                String nom = String.valueOf(home.model.getValueAt(jTable.getSelectedRow(), 0));
                String poste = String.valueOf(home.model.getValueAt(jTable.getSelectedRow(), 3));
                String rqqq = "SELECT `CIE/SFIN`,`SFIN OU CIE` FROM `allin` WHERE `Nom produit`='" + nom + "' and `poste`='" + poste + "'";

                String pos = "";
                String old = "";
                ResultSet rt = selection(rqqq);
                try {
                    while (rt.next()) {
                        old = rt.getString(1);
                        pos = rt.getString(2);
                        System.out.println(pos);
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(home.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (pos.equals("CIE")) {
                    rqt = "UPDATE `cie` SET `CIE`='" + data + "' WHERE `CIE`='" + old + "'";
                    rqt2 = "UPDATE `produit` SET `CIE`='" + data + "' WHERE `CIE`='" + old + "'";
                    System.out.println(rqt);
                } else if (pos.equals("SFIN")) {
                    rqt = "UPDATE `sfin`  SET `SFIN`='" + data + "' WHERE `SFIN`='" + old + "'";
                    rqt2 = "UPDATE `produit` SET `SFIN`='" + data + "' WHERE `SFIN`='" + old + "'";

                    System.out.println(rqt);
                }
                DataBase db = new DataBase();
                java.sql.PreparedStatement psm;
                java.sql.PreparedStatement psm2;

                try {
                    psm = db.con.prepareStatement(rqt);
                    psm.executeUpdate(rqt);
                    psm2 = db.con.prepareStatement(rqt2);
                    psm2.executeUpdate(rqt2);

                } catch (SQLException ex) {
                    Logger.getLogger(home.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }

    }

所以我找到了解决我问题的方法...每次我调用jTable.setModel时tableModelListener都不起作用,所以我所做的是:每次我调用jtable.setModel时都删除tableModelListener,然后再次像这样调用它:

            jTable.setModel(model);

            jTable.getModel().removeTableModelListener(new TableModelListener() {
            @Override
            public void tableChanged(TableModelEvent e) {
                modiftable(e);
            }

        });
            jTable.getModel().addTableModelListener(new TableModelListener() {
            @Override
            public void tableChanged(TableModelEvent e) {
                modiftable(e);
            }

        });


        if(jTable.getCellEditor()!=null)
        {
        jTable.getCellEditor().stopCellEditing();
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM