netbeans中此代码中的适当事件是什么?

时间:2013-03-07 02:46:10

标签: java swing

我有一个内部框架,但每次激活任何内部框架时,组合框中的值都会在下拉列表中重复,如何防止这种情况?

实际上我的问题是当其他内部帧被激活时,组合框开始重复

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);
     }

2 个答案:

答案 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事件,它应该只在第一次完成。