问题描述
我正在构建一个应用程序,当第一个 JFrame 被禁用时,我需要在另一个 JFrame 中打开一个 JFrame。
问题是当我想关闭第二个 JFrame 时,我需要启用第一个 JFrame。
我尝试了多种方法,但它无法正常工作,而且我无法在每种方法中都达到一个目标。 我需要达到两个目标:
- 打开第二个框架时禁用第一个框架
- 当第二个 Frame 关闭时启用它。
这是我的代码的一部分:
private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
PaymentJFrame pjf = new PaymentJFrame();
//setEnableValue(false);
//enableFrame();
this.setEnabled(false);
pjf.setVisible(true);
if (!pjf.isActive()){
this.setEnabled(true);
}
}
此代码根本不启用第一帧。
我试图通过在第二个框架关闭时添加enable
来以另一种方式使用它,但它不起作用:
//Class in first Frame
private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
PaymentJFrame pjf = new PaymentJFrame();
//setEnableValue(false);
//enableFrame();
this.setEnabled(false);
pjf.setVisible(true);
}
//Class in second Frame
private void formWindowClosed(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
FinancialDocumentsJFrame.setEnableValue(true);
}
有谁知道我怎样才能达到这些目标?
第一个框架是主框架,第二个框架是一个类,我从中创建框架对象以显示并从用户那里获取更多信息。
我使用 netBeans IDE 设计器。
1楼
首先,一个 Swing 应用程序 ,其他窗口可以是JDialog
或其他东西。
至于你的问题,以这段代码为例。
它使用侦听器来检测第二个窗口的关闭事件。
下面的代码应该在(第一个) JFrame
(看起来你有一个按钮)
private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {
JDialog paymentDialog = new JDialog();
MyFirstFrame.this.setEnabled(false);
paymentDialog.setVisible(true);
paymentDialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
MyFirstFrame.this.setEnabled(true);
}
});
}
您可以像处理框架一样通过扩展JDialog
来创建自己的对话框,并在此代码中使用自定义对话框。
此外,您可以考虑使用 ,而不是将JFrame
设置为启用或禁用,它会在对话框处于活动状态时阻止对 JFrame 的操作。
此外,还有用于 Swing 窗口的setAlwaysOnTop(boolean)
。
2楼
使用this.dispose()
方法JFrame
具有用于JFrame
关闭的dispose()
方法
3楼
我决定使用 jDialog,因为网上很多人都推荐它。
我使用了一个 jDialog 并复制了我在第二个 jFrame 中使用的所有对象。
它以我想要的方式工作。
我唯一的问题是,为什么 java 没有准备一种不同的方式来满足这种需求。
我在第一个 jFrame 中使用动作侦听器打开第二个 Frame,我已经使用 jDialog 为它打开了第二个 Frame。
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
ActivityJDialog ajdf = new ActivityJDialog(this,true);
ajdf.setVisible(true);
}
我已经将我想要的所有内容复制到这个 jDialog 中。
public class ActivityJDialog extends java.awt.Dialog {
//Document Attributes
int documentStatus = -1;
int documentType = -1;
/**
* Creates new form AcrivityJDialog
* @param parent
* @param modal
*/
public ActivityJDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
/*if(false) // Full screen mode
{
// Disables decorations for this frame.
//this.setUndecorated(true);
// Puts the frame to full screen.
this.setExtendedState(this.MAXIMIZED_BOTH);
}
else // Window mode
{*/
// Size of the frame.
this.setSize(1000, 700);
// Puts frame to center of the screen.
this.setLocationRelativeTo(null);
// So that frame cannot be resizable by the user.
this.setResizable(false);
//}
}
谢谢大家的帮助。