2010-06-05 106 views
1

我如何在我的主要中調用此函數?Java Swing可視化編輯器

private JFrame getMainpageframe1() { 
    if (mainpageframe1 == null) { 
     mainpageframe1 = new JFrame(); 
     mainpageframe1.setSize(new Dimension(315, 306)); 
     mainpageframe1.setContentPane(getMainpage()); 
     mainpageframe1.setTitle("Shopping For Less: Main Page"); 
     mainpageframe1.setVisible(true); 
     mainpageframe1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
    return mainpageframe1; 
} 

public static void main(String[] args) {   
    //call that function to output the JFrame? 
} 

感謝

+0

我使用的可視化編輯器也和有因爲發現它生成的代碼不遵循良好做法。 – 2010-06-05 11:22:21

回答

0
YOurClass instance = new YourClass(); 
instance.getMainpageframe1(); 

但是這個代碼實在是非常糟糕的。你至少應該移除setVisible() - 否則代碼將在該點處阻塞,並且該方法不會返回,直到該框架不再可見爲止。

YOurClass instance = new YourClass(); 
instance.getMainpageframe1().setVisible(true); 
+0

我試過了,我得到一個錯誤說:「你的類getMainpageframe1()不是JFrame的一個實例 \t \t \t JFrame的實例=新的JFrame(); \t \t \t instance.getMainpageframe1(); – bat 2010-06-05 05:38:56

+0

蝙蝠,你得到這個錯誤,因爲新的JFrame()實例化一個JFrame,但沒有實現getMainpageframe1() see here:YourClass instance = new YourClass(); 這實例化你的類實現getMainpageframe1()方法 – Beothorn 2010-06-05 06:52:55

+0

呵呵正確的代碼? – bat 2010-06-05 06:55:02

0
public class YourClass { 
    public static void main(String[] args) { 
     YourClass instance = new YourClass(); 
     JFrame frame = instance.getMainpageframe1(); 
    } 
} 

原因,你必須創建在主整個類的一個實例是,因爲你不能從一個靜態函數調用非靜態函數。

+0

雅我添加了公共課。我得到一個錯誤說:方法getMainpageFrame1()是未定義的類型JFrame – bat 2010-06-05 06:04:31

1

首先,你會想把你的GUI東西放在EDT上。 Java庫爲您提供了一些幫助器方法,它們將使您的生活通過SwingUtilities變得更加輕鬆。

其次我嘗試重構一下代碼,並可能將您構建的JFrame移動到單獨的類中。在這個代碼示例中,我將它作爲包含main方法的同一個類的一部分,並在此處擴展JFrame。

public class YourApp extends JFrame { 

    public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
     YourApp app = new YourApp(); 
     app.setupFrame(); 
     } 
    }); 
    } 

    private setupFrame() { 
    this.setSize(new Dimension(315, 306)); 
    this.setContentPane(getMainpage()); 
    this.setTitle("Shopping For Less: Main Page"); 
    this.setVisible(true); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 
+0

爲什麼SwingUtilities.invokeLater? – Beothorn 2010-06-05 06:23:01

+0

GUI創建代碼應該發生在事件分派線程中,此後將發生SwingUtilities.invokeLater(或者EventQueue.invokeLater)。代碼也可以在沒有它的情況下工作,但複雜的設置可能會遇到事件調度問題。 – 2010-06-05 07:39:22

+0

謝謝幫助kinda =] – bat 2010-06-05 08:12:38

0
public class YourClass{ 

    JFrame mainpageframe1; 

    private JFrame getMainpageframe1() { 
    if (mainpageframe1 == null) { 
     mainpageframe1 = new JFrame(); 
     mainpageframe1.setSize(new Dimension(315, 306)); 
     mainpageframe1.setContentPane(getMainpage()); 
     mainpageframe1.setTitle("Shopping For Less: Main Page"); 
     mainpageframe1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainpageframe1.setVisible(true); 
    } 
    return mainpageframe1; 
    } 

    public static void main(String[] args) { 
    YourClass yourClass = new YourClass(); 
    yourClass.getMainpageframe1(); 
    } 

}