【问题标题】:Java TableModel duplicating rows - How do I stop this from happening?Java TableModel 重复行 - 如何阻止这种情况发生?
【发布时间】:2015-06-10 06:52:42
【问题描述】:

所以在应用程序中,我创建了一个search for name 页面,用户将在其中输入名称,并作为user types(每次按下键)运行SQL 语句,它将获取记录@ 987654324@.

这很好用,但是当用户每次按下键时将值放入table 时,append 会将找到的结果放到表中,而不是替换值。这意味着每次按下一个键...都会生成重复的行。

所以我想知道是否有人有解决方案来阻止行被复制并替换为新值?我使用默认表模型:

private DefaultTableModel tModel = new DefaultTableModel(0, 0);

我的代码:

 @Override
        public void keyReleased(KeyEvent e) {
            updateTable();
            table.setModel(tModel);
            formPanel.add(table);
                         tModel.fireTableDataChanged();

    }
    public void updateTable(){
         System.out.println("Save member 1");

            try{
             //CHANGE THE VALUES SO WHEN CLICKS SAVE MEM

                /*-------------------------------------*/   

            //Connection + Statement
            conDB = getConnection();
            stmt = conDB.createStatement();
            String searchSql = "select * from members where name "
                    + " LIKE '" + txtName.getText() +"%'"; 
                if(!txtName.getText().equals(""))
                {
                    r = stmt.executeQuery(searchSql);
                }
                System.out.println("searching");
                tModel.setColumnIdentifiers(columnNames);
                while(r.next()){
                    tModel.addRow(new Object[] { 
                        r.getString("name")
                    });
                } 
            }
            catch(SQLException er){
                System.out.println("Error was: " + er);
            }
    }

public searchBoth(){
        super("Search");
        this.setBounds(400, 500, 854,400);
        this.setVisible(true);
        mainCon.add(formPanel);

        formPanel.add(lblName);
        formPanel.add(txtName);
        txtName.addActionListener(this);
        addKeyListener(this);
        txtName.addKeyListener(this);
    }

【问题讨论】:

  • 为了更好的帮助,请尽快发布 SSCCE/MCVE,简短、可运行、可编译
  • 1.这里没有什么关于表模型的事情,2. KeyEvents 触发 JDBC 的原因,3. XxxTableModel 是可重用的,4. 为什么有 formPanel.add(table);,5. 为什么有 tModel.fireTableDataChanged();跨度>

标签: java sql swing jtable defaulttablemodel


【解决方案1】:

将 rowCount 设置为 0 并添加行。这将删除现有行并添加新行

tModel.setRowCount(0);

代码

System.out.println("searching");
tModel.setRowCount(0);// *********************remove current rows to replace
tModel.setColumnIdentifiers(columnNames);
while(r.next()){
    tModel.addRow(new Object[] { 
        r.getString("name")
    });
}

【讨论】:

  • 加一,但formPanel.add(table);缺少 LayoutManager 的通知程序,结果,什么都不会显示 ....
  • @mKorbel - 我没有包含所有变量声明和其他文件。我已经测试了这段代码,它按照我的需要工作:)
  • @mKorbel 是的,但他说它已经附加了结果,所以它应该以某种方式可见.isn'tit
  • @FastSnail - 哦,好的,谢谢你清理它:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 2012-03-09
相关资源
最近更新 更多