JFrame,toFront(),ActionListener

时间:2015-01-13 23:17:04

标签: java user-interface jframe jdialog

我的问题是这个。我让这两个窗口一起工作并一起移动。 enter image description here

enter image description here

然而,如果我然后打开浏览器或者屏幕前面的东西,然后我尝试通过在任务栏上单击它来显示我的程序,那么前面只有一个窗口。对话框在后面,我不知道如何解决它。

我知道有功能ToFront()但是我不知道在这种情况下如何使用它。

2 个答案:

答案 0 :(得分:1)

不是创建两个JFrame,而是为主窗口创建一个JFrame,并将所有其他窗口创建为非模态JDialog,并将JFrame作为其所有者。这将使它们堆叠成一个组;每当用户将一个带到前面时,所有都被带到前面。

答案 1 :(得分:0)

这可以解决你的问题,正如VGR已经说过的那样......非模态对话将跟随它的父母:

public class FocusMain extends JFrame {

    private static FocusMain frame;
    private static JDialog dialog;
    private JCheckBox checkBox;

    private JPanel contentPane;

    public static void main(String[] args) {
        frame = new FocusMain();
        frame.setVisible(true);
        dialog = new JDialog(frame);
        dialog.setSize(100, 100);
    }

    public FocusMain() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        setContentPane(contentPane);

        checkBox = new JCheckBox("show dialog");
        checkBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (checkBox.isSelected()) {
                    dialog.setVisible(true);
                } else {
                    dialog.setVisible(false);
                }
            }
        });
        contentPane.add(checkBox);
    }
 }

使用扩展的JDialog,您需要通过构造函数传递父框架,如果您的构造函数如下所示:public ExtendedJDialog(JFrame parentFrame)那么您可以将其与super(parentFrame);的父框架连接起来构造函数中的第一行......

 public class FocusMain extends JFrame {

    private static FocusMain frame;
    private static FocusDialog dialog;
    private JCheckBox checkBox;

    private JPanel contentPane;

    public static void main(String[] args) {
        frame = new FocusMain();
        frame.setVisible(true);
        dialog = new FocusDialog(frame);
    }

    public FocusMain() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        setContentPane(contentPane);

        checkBox = new JCheckBox("show dialog");
        checkBox.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (checkBox.isSelected()) {
                    dialog.setVisible(true);
                } else {
                    dialog.setVisible(false);
                }
            }
        });
        contentPane.add(checkBox);
    }
 }

和扩展的JDialog

 public class FocusDialog extends JDialog {

    public FocusDialog(JFrame parentFrame) {
        super(parentFrame);
        setSize(100, 100);
    }
 }

如果您需要阻止父级的对话框,请使用super(parentFrame, true);