gpt4 book ai didi

java - 如何在 Swing 中获取 JFrame

转载 作者:行者123 更新时间:2023-12-02 03:38:46 25 4
gpt4 key购买 nike

我正在开发一个简单的应用程序,我需要访问在从不同位置初始化程序时创建的 JFrame ,在这些位置并不总是可以直接访问它(例如 contentPane 为空,因此 SwingUtilities.getWindowAncestor(Component) 不起作用)。还有其他方法可以做到这一点吗?例如,这是一个负责初始化的类:

public final class Application{
public static void start(){
//Empty screen with menu
SwingUtilities.invokeAndWait(() -> {
JFrame frame = new JFrame("Main frame");
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Start");
menuBar.add(menu);
frame.setJMenuBar(menuBar);
});
}
}

我需要从其他地方使用它,例如

JPanel panel = new JPanel();
//initialize the panel
//push it to the content pane of Main frame

因此,为了共享主框架,我倾向于将其包装在单例类中,然后提供静态方法。也许还有另一种方法可以做到这一点?

最佳答案

您可以将其存储在静态引用中:

public final class Application{
static JFrame mainFrame; //static attribute
public static void start(){
//Empty screen with menu
SwingUtilities.invokeAndWait(() -> {
JFrame frame = new JFrame("Main frame");
mainFrame = frame; //Storing in static attribute
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Start");
menuBar.add(menu);
frame.setJMenuBar(menuBar);
});
}
}

调用如下:

JPanel panel = new JPanel();
//initialize the panel
Application.mainFrame.getContentPane().add(panel);

这是一个丑陋的解决方案,也许您可​​以查看设计模式以获得更好的解决方案:

http://www.tutorialspoint.com/design_pattern/

关于java - 如何在 Swing 中获取 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37102037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com