2014-10-17 21 views
0

我有一个DesktopPane内的几个JInternalFrames,我第一次打开它时发现了一些东西。JInternalFrame开放和重点

当我第一次打开一个,然后打开第二个时,第一个JInternalFrame将在第二个之上。我希望他们互相打开,但这只是第一次。我现在意识到,这是因为它们被添加的顺序。但是我的程序将在桌面窗格加载时检索信息,所以我需要在实际打开窗口之前添加JIF变量。那么,如何确保打开的窗口出现在顶端,而不管它们添加的顺序如何?

我不想使用对话框。

+1

我不能重新在Windows这个问题,你可能想提供一个简短的代码示例。您可以使用'InternalFrameListener'并在'internalFrameActivated'内调用'toFront'。 – user1803551 2014-10-20 08:27:05

+0

我的代码初始化多个JIF,但保持它们不可见,直到用户打开窗口。所以当他们打开我只是setVisible(true)。我检查了InternalFrameListener,但似乎没有检查setVisible(false)的东西;已被调用。有没有办法做到这一点?我没有处理我的JIF,因为数据需要保留,直到程序关闭。 – Rahul 2014-10-20 22:40:12

+0

没关系,谢谢!当窗口被设置为可见时,只需调用toFront()就足够了。 – Rahul 2014-10-20 22:42:05

回答

0

试试这个代码...

我已经为您创建明白一个示例应用程序...

public class NewJFrame extends javax.swing.JFrame { 


private javax.swing.JButton jButton1; 
private javax.swing.JDesktopPane jDesktopPane1; 

//This is a Internal Frame I have created 
private PaymentInternalFrame payIF; 


public NewJFrame() { 
    initComponents(); 
} 


private void initComponents() { 

    jButton1 = new javax.swing.JButton(); 
    jDesktopPane1 = new javax.swing.JDesktopPane(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jButton1.setText("Click"); 
    jButton1.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jButton1ActionPerformed(evt); 
     } 
    }); 

    javax.swing.GroupLayout jDesktopPane1Layout = new javax.swing.GroupLayout(jDesktopPane1); 
    jDesktopPane1.setLayout(jDesktopPane1Layout); 
    jDesktopPane1Layout.setHorizontalGroup(
     jDesktopPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 0, Short.MAX_VALUE) 
    ); 
    jDesktopPane1Layout.setVerticalGroup(
     jDesktopPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 412, Short.MAX_VALUE) 
    ); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 529, Short.MAX_VALUE) 
     .addComponent(jDesktopPane1) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(jDesktopPane1)) 
    ); 

    pack(); 
}// </editor-fold>       



private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     if(payIF==null||payIF.isClosed()){ 
      payIF = new PaymentInternalFrame(); 
      mainDesktop.add(payIF); 
      payIF.setVisible(true); 
      payIF.setMaximum(true); 
      payIF.isSelected(); 
     }else{ 
      payIF.setSelected(true); 
     } 
    } catch (PropertyVetoException e) { 
     NotificationMessage.errorMessage(this, e); 
    } 
}           



//Main Method... 


public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new NewJFrame().setVisible(true); 
     } 
    }); 
} 

}

+0

上面的构造函数声明你的代码.. YourInternalFrame yourInternalFrameObject; – 2017-12-31 10:50:39

+0

只需要评论,如果你想澄清.. – 2017-12-31 10:52:16

+0

请解释你的解决方案,并把修改或扩展到您的文章,而不是在评论。 – clemens 2017-12-31 11:17:48