我有一个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