我有一個DesktopPane內的幾個JInternalFrames,我第一次打開它時發現了一些東西。JInternalFrame開放和重點
當我第一次打開一個,然後打開第二個時,第一個JInternalFrame將在第二個之上。我希望他們互相打開,但這只是第一次。我現在意識到,這是因爲它們被添加的順序。但是我的程序將在桌面窗格加載時檢索信息,所以我需要在實際打開窗口之前添加JIF變量。那麼,如何確保打開的窗口出現在頂端,而不管它們添加的順序如何?
我不想使用對話框。
我有一個DesktopPane內的幾個JInternalFrames,我第一次打開它時發現了一些東西。JInternalFrame開放和重點
當我第一次打開一個,然後打開第二個時,第一個JInternalFrame將在第二個之上。我希望他們互相打開,但這只是第一次。我現在意識到,這是因爲它們被添加的順序。但是我的程序將在桌面窗格加載時檢索信息,所以我需要在實際打開窗口之前添加JIF變量。那麼,如何確保打開的窗口出現在頂端,而不管它們添加的順序如何?
我不想使用對話框。
試試這個代碼...
我已經爲您創建明白一個示例應用程序...
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);
}
});
}
}
上面的構造函數聲明你的代碼.. YourInternalFrame yourInternalFrameObject; – 2017-12-31 10:50:39
只需要評論,如果你想澄清.. – 2017-12-31 10:52:16
請解釋你的解決方案,並把修改或擴展到您的文章,而不是在評論。 – clemens 2017-12-31 11:17:48
我不能重新在Windows這個問題,你可能想提供一個簡短的代碼示例。您可以使用'InternalFrameListener'並在'internalFrameActivated'內調用'toFront'。 – user1803551 2014-10-20 08:27:05
我的代碼初始化多個JIF,但保持它們不可見,直到用戶打開窗口。所以當他們打開我只是setVisible(true)。我檢查了InternalFrameListener,但似乎沒有檢查setVisible(false)的東西;已被調用。有沒有辦法做到這一點?我沒有處理我的JIF,因爲數據需要保留,直到程序關閉。 – Rahul 2014-10-20 22:40:12
沒關係,謝謝!當窗口被設置爲可見時,只需調用toFront()就足夠了。 – Rahul 2014-10-20 22:42:05