我有一个主要的应用程序窗口(JFrame),填满整个屏幕。
单击按钮时,会出现一个较小的窗口,让用户输入一些数据。当用户这样做时,主窗口既不应该跳到它的前面,也不允许交互。
解决方案:打开一个模态JDialog。我们可以调用该对话框1.
但是,当点击此对话框中的按钮时,会弹出一个新窗口(是/否对话框),并且需要在已有模态的JDialog对话框1上运行模态试图做到这一点,第二个对话框不断消失在第一个之后。
我试图让Dialog 1成为一个JFrame,但是当然,我放弃了“模态”位。强制对话框1仍然保持主窗口的按钮可点击。
我错过了什么?我怎样才能把一个模态摇摆窗口在另一个模态摇摆窗口?
编辑:
开主类:
public class MainWin extends JFrame {
public MainWin(){
this.setSize(800,800);
JButton b = new JButton("click hehe");
this.getContentPane().add(b);
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Dia1(MainWin.this);
}
});
this.setVisible(true);
}
}
主窗口:
public class MainWin extends JFrame {
public MainWin(){
this.setSize(800,800);
JButton b = new JButton("click hehe");
this.getContentPane().add(b);
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Dia1(MainWin.this);
}
});
this.setVisible(true);
}
}
第一个对话框中的一个没有,真正的工作版本 小例子, :
public class Dia1 extends JDialog {
public Dia1(final JFrame parent){
super(parent, true);
this.setSize(400, 400);
JButton b = new JButton("click hehe");
this.getContentPane().add(b);
this.setVisible(true);
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Dia2(parent);
}
});
}
}
第二个对话框:
public class Dia2 extends JDialog {
public Dia2(JFrame parent){
super(parent, true);
this.setSize(200, 200);
JButton b = new JButton("click hehe");
this.getContentPane().add(b);
this.setVisible(true);
}
}
PS:我只是意识到:对话2不会隐藏,我怀疑..这是根本不存在。很可能是因为父窗口被模态对话框阻止了?
2015-04-16
Layna
+1
*“我缺少什么?” *的[MCVE(http://stackoverflow.com/help/mcve)(最小完备可验证例)或[什么是基本的代码示例SSCCE](http://www.sscce.org/)(简短,独立,正确的例子)。 –
+0
在最纯粹的版本中添加了MCVE我可以拿出来......如果有JFrame/JDialog/Modal的soem组合可以完成我想要的功能吗? –