在JButton中使用匿名ActionListener隐藏JFrame

3

我有一个欢迎窗口(JFrame),其中有一些按钮(JButton)用于执行每个可能的操作。每个按钮都应该启动一个新窗口并隐藏欢迎窗口。我知道可以使用setVisible(false);实现。但我还无法让它正常工作。

这是我拥有的代码示例:

    _startBtn.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            System.out.println("_startBtn pressed");
            // Code to hide this JFrame and initialize another
        }

我的问题是,我如何使用匿名类来完成这个任务?

谢谢提前!


1
我有一个欢迎(或菜单)窗口(JFrame),其中有一些按钮(JButton)用于每个可能的操作。 每个按钮都应启动一个新窗口并隐藏欢迎窗口。请参见使用多个JFrames,好的/坏的实践? 重新设计GUI而不是使这样的混乱(多个框架)可靠地工作 - 这将更快。 - Andrew Thompson
1
"..我还无法让它工作。" 我们可以猜测原因,但您可以节省我们的麻烦,直接告诉我们。 - Andrew Thompson
1
虽然@AndrewThompson提供的建议在这种情况下确实是有效的。但如果你仍然想坚持你那不太好的方法,这里有一个相同的示例 - nIcE cOw
1
根据您的建议,我正在更改设计为单个JFrame,并使用CardLayout进行管理。我希望这样可以满足我的需求。现在我有一些其他问题(因为我以前从未使用过它),但我不认为我应该在这里发布。 - Ángel Araya
不错的选择(单帧)!另外,把它作为一个独立的问题提出来也是一个不错的选择。我会留意后续的问题,但如果有人在我看到之前就提供了一个很好的答案,也不要感到惊讶。 :) - Andrew Thompson
如果您仍然遇到任何问题...或者我误解了您的问题.. - Bharat Sharma
1个回答

2

我为您提供一个示例,希望它能帮到您。

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;


public class windows_test {
    JFrame login = null;
    JFrame inner_frame = null;

    public windows_test() {
        login = new JFrame();
        login.setBounds(10, 10, 300, 300);
        login.setLayout(new BorderLayout());

        JButton button = new JButton("Login");
        login.add(button, BorderLayout.CENTER);

        login.setVisible(true);

        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                if (inner_frame == null) {
                    inner_frame = new JFrame();
                }
                inner_frame.setLayout(new FlowLayout(FlowLayout.CENTER));
                inner_frame.add(new JButton("inner frame"));
                inner_frame.setVisible(true);
                login.setVisible(false);
                inner_frame.setBounds(10, 10, 300, 300);
            }
        });
    }
}

我建议您使用jpanel而不是jframes,但由于您要求使用frames,因此我已经使用它们创建了它。希望这可以帮助您,如果我有错误或者您无法理解,请随时问我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接