2010-06-05 2 views
1

Как я могу назвать эту функцию в моей главной?Java Swing Visual Editor

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

Я использую Visual Editor также и с тех пор узнал, что код он генерирует не следовать передовой практики. –

ответ

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

+0

летучая мышь, вы получаете эту ошибку, потому что новый JFrame() создает экземпляр JFrame, который не реализует getMainpageframe1() здесь: YourClass instance = new YourClass(); это создает экземпляр класса yourclass, который реализует метод getMainpageframe1() – Beothorn

+0

huh, так что это правильный код? – bat

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

Причина, почему вы должны создать экземпляр целого класса в основном, потому что вы не можете вызвать нестатическую функцию из статической функции.

+0

Я добавил публичный класс. Я получаю сообщение об ошибке: Метод getMainpageFrame1() не определен для типа JFrame – bat

1

Во-первых, вы захотите разместить свой графический интерфейс на EDT. Библиотека Java предоставляет вам некоторые вспомогательные методы, которые облегчат вашу жизнь с SwingUtilities.

Во-вторых, я попытаюсь немного перестроить код и, возможно, переместить JFrame, который вы создаете, в отдельный класс. В этом примере кода я сделал его частью того же класса, который содержит основной метод, и я расширяю 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

+0

Код создания GUI должен иметь место в потоке отправки событий, отныне SwingUtilities.invokeLater (или, альтернативно, EventQueue.invokeLater). Код будет работать и без него, но сложные настройки могут иметь проблемы с диспетчеризацией событий. –

+0

спасибо, что помогли kinda =] – bat

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(); 
    } 

}