我正在构建一个应用程序,我需要在第一个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设计器。
答案 0 :(得分:2)
首先,Swing应用程序should only have one 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
来创建自己的对话框,并使用此代码中的自定义对话框。此外,您可以考虑在对话框处于活动状态时使用modal JDialog来阻止对JFrame的操作,而不是设置启用或禁用JFrame
。
而且,Swing窗口还有setAlwaysOnTop(boolean)
。
答案 1 :(得分:0)
使用this.dispose()
方法JFrame
使用dispose()
方法JFrame
关闭
答案 2 :(得分:0)
我决定使用jDialog,就像网上很多人推荐的一样。
我使用了jDialog并复制了我在第二个jFrame中使用过的所有对象。
它按我想要的方式工作。
我唯一的问题是为什么java没有准备好不同的方式来回答这个需求。
我在第一个jFrame中使用动作侦听器来打开我使用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);
//}
}
谢谢大家的帮助。