我正在构建一个应用程序,当第一个JFrame被禁用时,我需要在另一个JFrame中打开一个JFrame。
问题是当我想关闭第二个JFrame时,我需要启用第一个JFrame。
我已经尝试了几种方法,但它不能正常工作,我不能在每个方法中达到一个目标。我需要同时达到两个目标:
- 打开第二帧时禁用第一帧
- 第二帧关闭时启用
下面是我的部分代码:
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设计器。
首先,一个Swing应用程序应该只有一个JFrame,其他窗口可以是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
来创建您自己的对话框,就像您对框架所做的那样,并在此代码中使用自定义对话框。另外,您可以考虑使用模态JDialog,而不是将JFrame
设置为启用或禁用,当对话框处于活动状态时,它会阻止对JFrame的操作。
更进一步,还有Swing窗口的setAlwaysOnTop(boolean)
。
use this.dispose()
method JFrame
has dispose()
method for JFrame
Close
我决定使用jDialog,因为网上很多人都推荐它。
我使用了一个jDialog并复制了我在第二个jFrame中使用的所有对象。
它按我想要的方式工作。
我唯一的问题是为什么java没有准备一个不同的方式来满足这个需求。
我在第一个jFrame中使用一个动作监听器来打开第二个Frame,我使用了jDialog。
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);
//}
}
谢谢大家的帮助。