0

大家好,我是java新手。我正在尝试将我的“下一个”JButton 重定向到另一个类中的另一个框架(DriversLicenseApplicant)。问题是当我单击“下一步”按钮时,它一直打开我的程序当前正在执行的框架,即 MainInfo。你能帮我写代码吗?谢谢你们。:)

    final JButton btnNext = new JButton("Next");
    btnNext.setBounds(824, 623, 89, 51);
    contentPane.add(btnNext);
        btnNext.addActionListener(
                new ActionListener(){


        public void actionPerformed(ActionEvent e) {
            if (btnNext.isSelected()) {
            DriversLicenseApplicant frame = new DriversLicenseApplicant();
            MainInfo objMain = new MainInfo();
                    frame.setVisible(true);
                        objMain.setVisible(false);



        }
        }
    });
4

1 回答 1

0

怎么了

关键线在这里

1  DriversLicenseApplicant frame = new DriversLicenseApplicant();
2  MainInfo objMain = new MainInfo();
3  frame.setVisible(true);
4  objMain.setVisible(false);

在此块之前,您有一个 frame this。(在 Java 中,您将所在的对象称为this.)this是打开的。

在第 1 行,您创建了一个新 frame frame,使您的总帧数变为两个。frame是隐藏的。

在第 2 行,您创建了第三个框架objMain。它与同一个类,this但它是一个不同的实例。(可以在 StackOracle 的网站上找到 Class 和 Instance 之间的区别说明)。objMain是隐藏的,但是this是开放的。

在第 3 行,您打开frame. 现在thisframe都是打开的,而objMain是隐藏的。this由于Java 的焦点规则而保持焦点。

在第 4 行,您隐藏objMain. 这没有效果,因为objMain一开始就没有打开。你仍然有 3 帧,两者this都是frame打开的,并且this仍然有焦点。

如何修复它

将这些行替换为

DriversLicenseApplicant frame = new DriversLicenseApplicant();
frame.setVisible(true);
this.setVisible(false);

将打开新框架并隐藏到当前框架。

但我认为可能存在潜在的设计问题。每个程序通常应该只有一帧。您可能想考虑将JDialog用于第二个窗口。您也可以将它们保持在同一个框架中,并使用CardLayout在它们之间切换。还要更改您的类以扩展JPanel,以便您可以将它们放在窗口的内容窗格中。它增加了灵活性,并且对于您选择的任何方法都很有用。

还有一件事

不得不提一下JButton的绝对定位。请使用布局。他们是你的朋友。

于 2013-08-23T12:59:12.817 回答