2016-05-08 14 views
0

我正在研究一個簡單的應用程序,並且需要訪問JFrame,這些應用程序在從不同的地方初始化程序時創建,並不總是可以直接訪問它(例如,contentPane爲空,所以SwingUtilities.getWindowAncestor(Component)贏得'工作)。有沒有其他方法可以做到這一點?例如,這是一個可重新初始化的類:如何在Swing中獲取JFrame

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 

所以,爲了共享主框架我傾向於包裝在一個單獨的類,然後提供一個靜態方法。也許還有另一種方式呢?

回答

2

您可以將其存儲在一個靜態參考:

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/