我有一个内部框架,但每次激活任何内部框架时,组合框中的值都会在下拉列表中重复,如何防止这种情况?
实际上我的问题是当其他内部帧被激活时,组合框开始重复
private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con= DriverManager.getConnection("jdbc:odbc:ref","sa","niit@123");
Statement st1=con.createStatement();
ResultSet rs1=st1.executeQuery("select opid from patient");
while(rs1.next())
{
opid_combo.addItem(rs1.getString(1));
}}
catch(Exception e)
{
System.out.println(e);
}
答案 0 :(得分:2)
您应该在重新加载之前清除组合框值......
private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
// Remove items first
opid_combo.removeAllItems()
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con= DriverManager.getConnection("jdbc:odbc:ref","sa","niit@123");
Statement st1=con.createStatement();
ResultSet rs1=st1.executeQuery("select opid from patient");
while(rs1.next())
{
opid_combo.addItem(rs1.getString(1));
}
}
catch(Exception e)
{
System.out.println(e);
}
}
Nit Pick
虽然我在这里。每当框架处于活动状态时重新加载项目可能不是一个好主意。如果您需要在某个时间重新加载组合框,则应该提供“刷新”选项。
此外,在事件调度线程的上下文中执行此操作并不是一个好主意,因为每次切换帧时它都会使应用程序“暂停”。相反,使用类似SwingWorker
的内容来加载背景中的值
答案 1 :(得分:2)
我的问题是,当其他内部帧被激活时,组合框开始重复
请勿在{{1}}事件中加载数据。而是使用internalFrameActivated
事件,它应该只在第一次完成。