Java从另一个类处理JFrame窗口

Java从另一个类处理JFrame窗口,java,swing,Java,Swing,类Main具有构造JFrame的Main方法。 类MainView具有附加在JFrame上的面板和按钮 我需要做的是通过单击某个按钮来处理JFrame窗口 我试过各种方法,从这里我找到了,Stackoverflow。但到目前为止还没有解决办法 public final class Main { static JFrame frame = null; public static void main(String[] args) throws IOException { SwingUt

类Main具有构造JFrame的Main方法。 类MainView具有附加在JFrame上的面板和按钮

我需要做的是通过单击某个按钮来处理JFrame窗口

我试过各种方法,从这里我找到了,Stackoverflow。但到目前为止还没有解决办法

public final class Main {

static JFrame frame = null;

public static void main(String[] args) throws IOException {

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {

            try {
                frame = new MainView("Blackjack 2017");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(650, 450);
            frame.setVisible(true);
        }
    });


}
}

查看有关关闭框架(或对话框)的一些基本信息

您只需使用
ExitAction
类,它是一个通用的
操作
,可以添加到任何按钮(或菜单项),并将如同用户单击窗口的关闭按钮一样


该代码通过将
windowClosing
事件分派到窗口来工作。因此,它假设您已为窗口调用了
setDefaultCloseOperation(…)

问题是如何从另一个类访问JFrame fame,即使我将frame设置为静态。@HyunJung您的类扩展了frame,因此不需要静态变量。尝试使用静态变量表示设计不佳。扩展JFrame也不是一个好的设计。在任何情况下,我都向您展示了一个通用的解决方案,该解决方案介绍了如何在不使用静态变量的情况下访问框架,无论框架是在同一个类中还是在不同的类中。如果您不想使用
ExitAction
,请查看代码以查看它是否找到当前帧。“关键是如何从另一个类访问JFrame fame,即使我将帧设置为静态”-您不需要,
MainView
已经是屏幕上的主帧,只需调用
dispose
即可关闭它。不要依赖于
静态
作为一种交叉通信机制,它不是真正的目的。还有其他更好的方法可以实现相同的结果,从而减少问题
public class MainView extends JFrame implements ActionListener {

private static final long serialVersionUID = 4728244239185625080L;
private Dealer dealer;
private User user;
private ControlPanel controlPanel;
public static Container c;

public MainView() {

}

public MainView(String title) throws IOException {

    super(title);

    dealer = new Dealer();
    user = new User();

    System.out.println(title + " frame made");

    controlPanel = new ControlPanel();
    controlPanel.setControlPanel();

    c = getContentPane();
    c.add(controlPanel);

    controlPanel.getPlayBtn().addActionListener(this);
    controlPanel.getExitBtn().addActionListener(this);
}

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("Play")) {
        System.out.println("play clicked");
        c.removeAll();
        c.add(playPanel);
        c.validate();

    } else if (e.getActionCommand().equals("Exit")) {


    }