TableListener java
我的表格有3个操作1)添加2)删除3)更新状态 其中1和2是Jbuttonsl 单击1)添加时,将添加新行 单击2)删除时,将添加行 1和2)按照我的设置工作,但为了更新最后一列中的状态,我以这种方式编码TableListener java,java,swing,jtable,Java,Swing,Jtable,我的表格有3个操作1)添加2)删除3)更新状态 其中1和2是Jbuttonsl 单击1)添加时,将添加新行 单击2)删除时,将添加行 1和2)按照我的设置工作,但为了更新最后一列中的状态,我以这种方式编码 public void statusUpd() throws SQLException { table.getModel().addTableModelListener(new TableModelListener() { @Overri
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){}
}
}
}
});
}
public void statusUpd()引发SQLException
{
table.getModel().addTableModelListener(新的TableModelListener())
{
@凌驾
公共作废表已更改(TableModelEvent tme)
{
int row=table.getSelectedRow();
if(!(row可能不是最好的方法,但是您可以添加一个类变量来指示您刚刚单击了一个按钮
boolean buttonClicked = false;
单击“添加”或“删除”时,将其设置为true,然后将其置于更新代码的开头:
if(buttonClicked){
buttonClicked = false;
return;
}
tablemodeleevent
有一个方法,您可以使用该方法查找操作类型。因此,您可以在tableChanged
方法开头的代码中包含:
if(tme.getType() != TableModelEvent.INSERT
&& tme.getType() != TableModelEvent.DELETE)
{
//do stuff
}
或同等地
if(tme.getType() != TableModelEvent.UPDATE)
{
//do stuff
}
为了更快地获得更好的帮助,请发布一篇文章。无论你做什么,都不要更改ModelListener中的模型。基本设计是错误的,你的解决方案更是错误的。建议使用静态是最糟糕的。@GuillaumePolet-你能解释一下为什么这是错误的吗?我以前没有使用过JTable,但我在我的工作中使用过这种类型的解决方案拥有没有问题的代码。我给出这个答案的前提是所有相关的代码都位于同一个类中。最初的问题是TableModelListener
不是将各种模型同步在一起的好方法。有两种很好的方法可以做到这一点:1)在自定义TableModel
2)创建一个真正的“Model”并制作一个表格Model
,它是该“Model”上的适配器".无论选择哪一个,你建议的丑陋的破解都不必做。使用静态变量是很多人倾向于使用的一个非常坏的习惯。@GuillaumePolet-你是对的,我绝对不应该使用静态的。这是我养成的习惯,因为我的大多数类只有一个实例,并且从ma运行在方法中。也就是说,我不认为我的解决方案在移除静态时是错误的。它可能有点难看,使用TableModel功能(我没有使用过)可能会有更好的答案,但如果事情正确同步,应该不会引起问题。