在我添加Yes/No
选项之前,delete
按钮仅删除了所需的行。但是,添加Yes/No
选项后,数据库中的第一行将与所需行一起删除。
b6.addActionListener (new ActionListener ()
{
JFrame f4=new JFrame("Are you sure?");
JPanel p4=new JPanel();
JButton yes=new JButton ("Yes");
JButton no=new JButton ("No");
public void actionPerformed (ActionEvent e)
{
p4.add (yes);
p4.add (no);
f4.add (p4);
f4.setVisible (true);
f4.setSize (300,200);
yes.addActionListener (new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
try
{
f4.dispose();
rs.deleteRow();
rs.close();//
st.close();//to prevent gap in database
st=conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE,rs.CONCUR_UPDATABLE);
String sql="select * from trial1";
rs= st.executeQuery (sql);
rs.next();
t.setText (rs.getString ("Firstname"));
t1.setText (rs.getString ("Lastname"));
}
catch (Exception ex)
{
}
}
});
no.addActionListener (new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
f4.dispose();
}
});
}
});
答案 0 :(得分:1)
暂时回答,因为我现在无法检查这个问题:
我认为您将ActionListener
添加到yes
到<{strong> b6
actionPerformed()
内的b6
被称为第二次点击它(yes
)意味着您在同一个yes
按钮上实际拥有两个动作侦听器。
因此,当您按下rs
按钮时,操作会执行两次。所以第一次,rs
光标设置为您选择的行。但是,在该操作中,您将select * from trial1
设置为新查询(rs
)以填充字段。
因此,当激活第二个动作侦听器时,ActionListener
指向的位置 - 指向最后一个查询的第一个记录。这是将被删除的记录。
要避免这一切,您必须在yes
之外添加actionPerformed()
到{{1}} - 可能在初始化程序块中?
答案 1 :(得分:0)
我通过对f4.dispose()的位置进行小的更改来修复故障,并且还在ActionListener中为b6包含了一个try和catch块。
b6.addActionListener (new ActionListener ()
{
JFrame f4=new JFrame("Are you sure?");
JPanel p4=new JPanel();
JButton yes=new JButton ("Yes");
JButton no=new JButton ("No");
public void actionPerformed (ActionEvent e)
{
p4.add (yes);
p4.add (no);
f4.add (p4);
f4.setVisible (true);
f4.setSize (300,200);
try {
yes.addActionListener (new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
try
{
rs.deleteRow();
rs.close();
st.close();
st=conn.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs. CONCUR_UPDATABLE);
String sql="select * from trial1";
rs= st.executeQuery (sql);
rs.next();
t.setText (rs.getString ("Firstname"));
t1.setText (rs.getString ("Lastname"));
f4.dispose();
}
catch (Exception ex)
{
}
}
});
no.addActionListener (new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
f4.dispose();
}
});
}
catch (Exception ex)
{
}
}
});