Java从另一个类处理JFrame窗口
类Main具有构造JFrame的Main方法。 类MainView具有附加在JFrame上的面板和按钮 我需要做的是通过单击某个按钮来处理JFrame窗口 我试过各种方法,从这里我找到了,Stackoverflow。但到目前为止还没有解决办法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
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")) {
}