2013-06-20 12 views
0

, вероятно, простой вопрос, связанный с обучением графическому интерфейсу с использованием качелей и легким движением вперед, но с другой скоростью. Я пытаюсь сохранить компоненты GUI, сгруппированные в разных классах, чтобы мои классы были небольшими и позволяли использовать более гибкий графический интерфейс, но у меня есть один компонент, как я его называю в моем основном классе. Ниже приведен код для создания кадра и компонента. Я бы предположил, что есть проблема с тем, как я звоню, но у меня заканчиваются идеи о том, как еще назвать это. Любые мысли были бы оценены ..... Было не очень понятно вопрос о том, чтобы добавить компонент в JFrame в frmMainMenu, проблема заключается в том, что компонент не отображается в кадре при запуске в настоящее времяКомпоненты Swing в разных классах

Главный класс с JFrame

public class frmMainMenu { 
    public static void main(String main[]){ 
     //Create Frame 
     JFrame frmMainMenu = new JFrame(); 

     //Define Layout Manager 
     GridBagLayout gridBag = new GridBagLayout(); 
     GridBagConstraints c = new GridBagConstraints(); 
     frmMainMenu.setLayout(gridBag); 

     //Add Components 

     //Create Left Container 
     c.fill = GridBagConstraints.VERTICAL; 
     c.weighty = 1; 
     c.gridx = 0; 
     c.gridy = 1; 
     c.ipadx = 30; 

     frmMainMenu.add(new comLeftToolBar(),c); 

     frmMainMenu.setExtendedState(JFrame.MAXIMIZED_BOTH); 

     frmMainMenu.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     //Display Frame 
     frmMainMenu.setVisible(true); 
    } 
} 

код компонента

public class comLeftToolBar extends JPanel{ 
    public comLeftToolBar() { 

    JPanel comLeftContainer = new JPanel(); 
    GridBagLayout leftGridBag = new GridBagLayout(); 
    comLeftContainer.setLayout(leftGridBag); 
    GridBagConstraints b = new GridBagConstraints(); 

    JToolBar comLeftToolBar = new JToolBar(JToolBar.VERTICAL); 
    b.gridx = 0; 
    b.gridy = 0; 
    b.ipady = 50; 

    JButton comNavButton = new JButton(); 
    JButton comProButton = new JButton(); 

    comLeftToolBar.add(comNavButton); 
    comLeftToolBar.add(comProButton); 

    comLeftContainer.add(comLeftToolBar,b); 
    comLeftContainer.setBorder(BorderFactory.createLineBorder(Color.black)); 
    } 
} 
+0

Что не работает? Я также посмотрю на [Начальные темы] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html) – MadProgrammer

+0

'как я могу назвать его в моем основном классе' - что делать ты имеешь в виду? Вы используете 'new comLeftToolBar()', который является способом создания экземпляра класса. Кроме того, имена классов должны начинаться с символа верхнего регистра. Так что это должен быть 'ComLeftToolBar'. – camickr

+1

1) Не расширяйте панель в этом случае. Вместо этого создайте & используйте экземпляр одного. 2) Используйте последовательный и логический отступ для кодовых блоков. Отступ кода предназначен для того, чтобы помочь людям понять поток программы. –

ответ

1

проблема в том, что компонент не появляется в кадре при запуске в настоящее время

Ваш класс - панель. Но затем вы создаете другую панель (comLeftContainer) и добавляете компоненты к этой панели. Но вы не добавляете никаких компонентов в панель ComLeftToolBar, чтобы он оставался пустым.

Для простого решения, в нижней части вашего класса вы можете использовать:

add(comLeftContainer); 

Конечно, это не самое лучшее решение. Это даст вам структуру:

  • JPanel
    • JPanel
      • JToolBar
        • Кнопка

Нет необходимости иметь такую ​​сложную структуру. Панель инструментов - это компонент, который добавляется непосредственно к кадру.

Если вы хотите создать класс, который вы можете добавить в рамку, то посмотрите на учебник Swing на How to Use Tool Bars для лучшей структуры.

Смежные вопросы