Java swing中模态窗口上的模态窗口?

我有以下问题:Java swing中模态窗口上的模态窗口?

我有一个主要的应用程序窗口(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不会隐藏,我怀疑..这是根本不存在。很可能是因为父窗口被模态对话框阻止了?

回答:

这是一个模式工作的MCVE广告。

import java.awt.*; 

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.EmptyBorder;

public class ModalOverModal {

private JComponent ui = null;

ModalOverModal() {

initUI();

}

public void initUI() {

if (ui!=null) return;

ui = new JPanel(new GridLayout());

ui.setBorder(new EmptyBorder(40,40,40,40));

final JButton b1 = new JButton("Open Modal Dialog");

b1.setMargin(new Insets(40, 200, 40, 200));

ui.add(b1);

final JButton b2 = new JButton("Open 2nd Modal Dialog");

ActionListener al1 = new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(b1, b2);

}

};

b1.addActionListener(al1);

ActionListener al2 = new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(b2, "Close Me!");

}

};

b2.addActionListener(al2);

}

public JComponent getUI() {

return ui;

}

public static void main(String[] args) {

Runnable r = new Runnable() {

@Override

public void run() {

ModalOverModal o = new ModalOverModal();

JFrame f = new JFrame("Modal over Modal");

f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

f.setLocationByPlatform(true);

f.setContentPane(o.getUI());

f.pack();

f.setMinimumSize(f.getSize());

f.setVisible(true);

}

};

SwingUtilities.invokeLater(r);

}

}

以上是 Java swing中模态窗口上的模态窗口? 的全部内容, 来源链接: utcz.com/qa/259100.html

回到顶部