0

我的表有 3 个操作 1)添加 2)删除 3)更新状态。

其中 1 和 2 是 Jbuttonsl

当我单击 1) 添加新行时

当我单击 2) 删除添加的行。

1和2)按我的设置工作,但是为了更新最后一列中的状态,我以这种方式编码

public void statusUpd() throws SQLException
{
        table.getModel().addTableModelListener(new TableModelListener()
        {
            @Override
            public void tableChanged(TableModelEvent tme) 
            {
                int row = table.getSelectedRow();
                if(!(row<0))
                {
                    String name=(String)(table.getModel().getValueAt(row, 0));
                    String status = (String)(table.getModel().getValueAt(row, 3));
                    String update = "UPDATE "+deptName+ " SET Status = ? WHERE Name = ?";
                    try 
                    {
                        conn = ac.getConnection();
                        stmt = conn.prepareStatement(update);

                        stmt.setString(1, status);
                        stmt.setString(2, name);
                        stmt.executeUpdate();
                    } 
                    catch (SQLException | ClassNotFoundException ex)
                    {
                        ex.printStackTrace();                            
                    }
                    finally
                    {
                        try
                        {               
                            if(stmt != null){stmt.close();}
                            if(conn != null) {conn.close();}
                        }
                        catch(SQLException e){}
                     }
                }
            }
        });


}

但是这个方法会在点击添加或删除按钮时进行监听,有什么办法可以避免这种情况吗?

4

2 回答 2

1

TableModelEvent有一个getType方法,您可以使用它找到操作的类型。因此,您可以在方法开头的代码中包含tableChanged

if(tme.getType() != TableModelEvent.INSERT
        && tme.getType() != TableModelEvent.DELETE)
{
    //do stuff
}

或等效地

if(tme.getType() != TableModelEvent.UPDATE)
{
    //do stuff
}
于 2013-03-13T13:02:56.893 回答
-2

也许不是最好的方法,但您可以添加一个类变量来指示您刚刚单击了一个按钮。

boolean buttonClicked = false;

单击添加或删除时,将其设置为 true,然后将其放在更新代码的开头:

if(buttonClicked){
  buttonClicked = false;
  return;
}
于 2013-03-13T12:59:02.537 回答