0

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

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

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

2 回答 2

2

我的问题是当其他内部框架被激活时,组合框开始复制

不要在internalFrameActivated事件中加载数据。而是使用internalFrameOpened事件,它应该只在第一次完成。

于 2013-03-07T03:29:48.453 回答
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);
    }
}

挑剔

当我在这里的时候。每次激活框架时重新加载项目可能不是一个好主意。如果您需要在某个时间重新加载组合框,您可能应该提供“刷新”选项。

此外,在 Event Dispatching Thread 的上下文中执行此操作也不是一个好主意,因为它会使您的应用程序在每次切换帧时“暂停”。相反,使用类似 a 的东西SwingWorker在后台加载值

于 2013-03-07T02:52:14.113 回答