【问题标题】:Hiding JFrame with anonymous ActionListener in a JButton在 JButton 中使用匿名 ActionListener 隐藏 JFrame
【发布时间】:2012-08-12 04:53:40
【问题描述】:

我有一个欢迎(或菜单)窗口 (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
        }

我的问题是,我怎样才能使用像这样的匿名类呢?

提前致谢!

【问题讨论】:

  • “我有一个欢迎(或菜单)窗口 (JFrame),每个可能的操作都有一些按钮 (JButton)。每个按钮都应该启动一个新窗口并隐藏欢迎窗口。” 请参阅The Use of Multiple JFrames, Good/Bad Practice? 重新设计 GUI,而不是让这种混乱(多帧)可靠地工作 - 它会更快。
  • "..我还不能让它工作。"我们可以猜到原因,但你可以省去麻烦,告诉我们。
  • 尽管@AndrewThompson 给出的建议在这种情况下确实有效。但是,如果您仍然想坚持不太好的方法,这里有一个example 也可以。
  • 根据您的建议,我将设计更改为具有 CardLayout 管理的单个 JFrame。我希望这能满足我的需求。现在我还有一些其他问题(因为我以前从未使用过),但我认为我不应该在这里发布。
  • 不错的选择(单帧)!在单独的问题上提出它也是一个不错的选择。我会留意后续问题,但如果有人在我看到它之前跳入并提供了一个很好的答案,请不要感到惊讶。 :)

标签: java swing jframe actionlistener anonymous-inner-class


【解决方案1】:

我给你发了一个例子,希望对你有帮助。

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,但你已经要求提供框架,所以我用它们创建了它。希望它可以帮助您询问我是否在某个地方错了或者您无法理解。

【讨论】:

    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 2018-10-22
    • 2015-07-11
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多