2010-06-05 85 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(); 
    } 

}