2017-02-11 4 views
0

Я пытаюсь добавить кнопки к кадру, который я пытаюсь двумя способами.Добавление менеджера макета в JPanel и JFrame

  1. Изменение макета JPanel, а затем добавление кнопок непосредственно к панели. (Комментированный раздел в нижнем коде). Затем я добавляю панель в рамку. Этот подход работал, и он показывает кнопки в JFrame.

  2. Создание BorderLayout, добавление кнопок с использованием метода addLayoutComponents(). Затем добавьте эту ссылку bl (BorderLayout) к панели, а затем к JFrame. Почему этот подход не показывает кнопки в кадре? Где я неправ?

Может ли кто-нибудь помочь мне в изучении компонентов AWT? Я имею в виду, что читать сначала и последовательность понятий.

jf = new JFrame(); 
jp= new JPanel(new BorderLayout()); 

/*jp.add(new JButton("North"), BorderLayout.NORTH); 
jp.add(new JButton("South"), BorderLayout.SOUTH); 
jp.add(new JButton("East"), BorderLayout.EAST); 
jp.add(new JButton("West"), BorderLayout.WEST); 
jp.add(new JButton("Center"), BorderLayout.CENTER); 
jf.add(jp); 
*/ 

BorderLayout bl = new BorderLayout(); 

bl.addLayoutComponent(new JButton("North"), BorderLayout.NORTH); 
bl.addLayoutComponent(new JButton("South"), BorderLayout.SOUTH); 
bl.addLayoutComponent(new JButton("East"), BorderLayout.EAST); 
bl.addLayoutComponent(new JButton("West"), BorderLayout.WEST); 
bl.addLayoutComponent(new JButton("Center"), BorderLayout.CENTER); 
jp.setLayout(bl); 
jf.add(jp); 
+0

* «Может ли кто-нибудь помочь мне в изучении компонентов AWT **?» * Хотя AWT по-прежнему полезен для таких вещей, как макеты, цвета и шрифты, оставьте только компоненты на основе AWT. Они были полностью заменены (лучше) эквивалентами Swing. Или, как я выразился в одном из моих общих комментариев к копии/вставке: зачем использовать AWT? См. [Этот ответ] (http://stackoverflow.com/questions/6255106/java-gui-listeners-without-awt/6255978#6255978) по многим веским причинам отказаться от компонентов AWT в пользу Swing. –

ответ

3

Второй способ не работает, потому что это неправильно. Не следует добавлять компоненты непосредственно в диспетчер компоновки, а скорее в контейнер, который использует диспетчер компоновки, как это хорошо описано в учебнике менеджера макетов здесь: Layout Manager Tutorial. В API BorderLayout вам не нужно напрямую обращаться к методу addLayoutComponent, но он косвенным образом называется самим контейнером, когда компоненты добавляются в контейнер. Метод добавляет компонент к макету , но не к самому контейнеру, и это ключевое различие.

+0

Спасибо, что на воздушной подушке полно угрей. Но в чем цель addLayoutComponent. Если это не должно использоваться явно кодер. –

+0

Опять же, он используется контейнером, которому был назначен менеджер компоновки. Поскольку он используется внешним классом, он должен быть общедоступным. Но опять же, в учебниках хорошо объясняются, как использовать макеты, почему бы не начать их? –

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