Java 在多模态对话框之间切换焦点

Java 在多模态对话框之间切换焦点,java,swing,Java,Swing,是否可以在两个模态对话框之间切换焦点?也就是说,一个对话框有焦点并且是交互的,我将焦点/交互切换到另一个对话框。以下是我的示例代码: public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new

是否可以在两个模态对话框之间切换焦点?也就是说,一个对话框有焦点并且是交互的,我将焦点/交互切换到另一个对话框。以下是我的示例代码:

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setSize(400, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel(new FlowLayout());
    frame.add(panel);
    frame.setVisible(true);
    final JDialog dialog1 = new JDialog(frame, true);
    dialog1.setContentPane(new JLabel("dialog 1"));
    dialog1.pack();
    dialog1.setLocationRelativeTo(frame);
    new Thread(new Runnable() {
        public void run() {
            dialog1.setVisible(true);
        }
    }).start();
    final JDialog dialog2 = new JDialog(frame, true);
    JButton btn = new JButton("Test");
    btn.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // TODO
        }
    });
    dialog2.setContentPane(btn);
    dialog2.pack();
    dialog2.setLocationRelativeTo(frame);
    new Thread(new Runnable() {
        public void run() {
            dialog2.setVisible(true);
        }
    }).start();
}
我能把什么东西放在让dialog1集中注意力的地方吗?我试过
toFront
setAlwaysOnTop(true)
、和
grabFocus
,但都没有成功。他们将把dialog1带到前台,但dialog2仍然是交互式的

谢谢


David

你试过
requestFocus()
吗?@Eng:那不行。这个设计听起来很时髦。为什么不通过CardLayout.或一个
JTabbedPane
JToolBar
或两个非模式对话框或一些设计上下文交换视图。进度对话框必须是模式的吗?我不知道您的用例的所有细节,但我觉得它没有必要。如果你需要用户的输入,我会制作一个对话框模式。谢谢所有的反馈。最后,我们决定将进度对话框更改为非模态。如果我们想在显示进度对话框时阻止用户对任何窗口的输入,我们可以使用它的玻璃窗格。否则,模式对话框的焦点优先于进度对话框(因为它是非模式的)。通过这种方式,我们可以控制何时阻止用户输入,避免用户被卡住。另外,如果我们在另一个模态对话框已经显示时弹出一个模态对话框,我们会确保新对话框的父对象是现有对话框。