2014-10-17 58 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