2013-04-22 2 views
2

Может кто-нибудь сказать мне, какой ява раскладки мне нужно использовать для достижения ниже раскладки:Java GUI Макеты

Correct AddressBook Layout

Сейчас я разыгрываюсь с FlowLayout однако я не могу получить поле ввода в выстраиваться у окна вывода:

Bad Layout

Извинения, если это простой вопрос, это мой первый раз с помощью Java. Вот мой код кадра:

private void makeFrame() 
    { 
     setLayout(new FlowLayout(0)); 

    JPanel panel1 = new JPanel(); 
    JPanel panel2 = new JPanel(); 
    JPanel panel3 = new JPanel(); 
    JPanel panel4 = new JPanel(); 
    JPanel panel5 = new JPanel(); 
    JPanel panel6 = new JPanel(); 
    JPanel panel7 = new JPanel(); 

    panel1.setLayout(new FlowLayout(0)); 
    panel2.setLayout(new FlowLayout(0)); 
    panel3.setLayout(new FlowLayout(0)); 
    panel4.setLayout(new FlowLayout(0)); 
    panel5.setLayout(new FlowLayout(0)); 
    panel6.setLayout(new FlowLayout(0)); 
    panel7.setLayout(new FlowLayout(0)); 

    JLabel firstnameJLabel = new JLabel("First Name"); 
    JLabel lastnameJLabel = new JLabel("Last Name"); 
    JLabel streetJLabel = new JLabel("Street"); 
    JLabel townJLabel = new JLabel("Town"); 
    JLabel postcodeJLabel = new JLabel("Post Code"); 


    panel1.add(listAllBtn); 
    panel1.add(listPersonalBtn); 
    panel1.add(listBusinessBtn); 
    panel1.add(addPersonalBtn); 
    panel1.add(addBusinessBtn); 
    panel1.add(deleteBtn); 
    panel1.add(findBtn); 
    panel1.add(quitBtn); 


    panel2.add(firstnameJLabel); 
    panel2.add(this.firstNameField); 
    panel2.add(this.bookScrollPane); 
    this.outputArea.setEditable(false); 


    panel3.add(lastnameJLabel); 
    panel3.add(this.lastNameField); 

    panel4.add(streetJLabel); 
    panel4.add(this.streetField); 

    panel5.add(townJLabel); 
    panel5.add(this.townField); 

    panel6.add(postcodeJLabel); 
    panel6.add(this.postcodeField); 

    panel7.add(enterBtn); 


    add(panel1); 
    add(panel2); 
    add(panel3); 
    add(panel4); 
    add(panel5); 
    add(panel6); 
    add(panel7); 

    enterBtn.addActionListener(this); 
    } 
+3

Не используйте "магические числа" в вашем коде. Замените FlowLayout (0) FlowLayout (FlowLayout.LEFT); – Jazzepi

+1

Используйте GUI-менеджер, как в среде IDE NetBeans (действительно попробуйте). Где в редактировании текста WYSIWYG не обязательно хорош, для сложных, разных форм WYSIWYG служит функциональной цели. –

ответ

3

Давненько я работал с свинг, но похоже, что архитектура есть нечто вроде этого:

enter image description here

  1. У вас есть панель в нижней части, которая BorderLayout
  2. Внутри что , вы добавляете в общей сложности 4 новых панели, NORTH, WEST, CENTER и EAST
  3. в BorderLayout.NORTH вы добавляете панель с FlowLayout.LEFT
  4. в BorderLayout.WEST вы добавляете панель с GroupLayout.YAXIS. эта панель содержит ярлыки для имен и т. д. и кнопку ENTER
  5. в BorderLayout.CENTER вы добавляете текстовые поля, соответствующие ярлыкам
  6. в BorderLayout.EAST вы добавляете JSCrollpane.

Это может дать вам идею, и вы можете играть с этими различными панелями для того чтобы достигнуть того, что вы хотите

+0

Для левой стороны есть пример «GroupLayout» [здесь] (http://stackoverflow.com/a/8504753/230513). – trashgod

+0

Этикетки и текстовые поля в отдельных панелях не выравниваются вертикально. Также посмотрите, как высота и ширина добавляются одинаково. Я почти уверен, что это GridLayout. –

+0

@MichaelBorgwardt: Хорошая добыча; Я не обратил на это внимания. В [example] (http://stackoverflow.com/a/8504753/230513) показан один «GroupLayout». – trashgod

4

Использования несколько вложенных менеджеры компоновки

пример выглядит как верхний уровень BorderLayout с панелью прокрутки в CENTER месте, ряд кнопок (с использованием FlowLayout) в NORTH и GridLayout для текстовых полей в местоположении WEST. Последнее можно было бы улучшить, используя GroupLayout, который позволяет размеру строк и столбцов отдельно, но несколько сложнее в использовании.

Отличный tutorial on using layout managers (к сожалению, он, кажется, исчез из серверов Oracle, и ссылка указывает на, вероятно, временную копию).

+3

Для примера [http://stackoverflow.com/a/5630271/230513). – trashgod

0

я бы просто использовать MigLayout для макета страницы высокого уровня, а затем выпадающий на простые менеджер компоновки для . Это по сути сетка, но она очень проста в использовании. Однако Miglayout не может обернуть элементы, и это, по-видимому, проблема дизайна в Swing. WrapLayout - это менеджер компоновки, который дает вам эту функциональность, но может иметь проблемы.

http://tips4java.wordpress.com/2008/11/06/wrap-layout/

Глядя на снимке экрана предоставленные Вами я издевался так, как вы хотели бы, чтобы разделить его. Всего будет 9 строк (0-8) и 3 столбца (0-2). Для таких вещей, как элементы управления на самом верху, вы будете «охватывать» их по всем трем столбцам.

Для текста, просто поместить текст внутри это индивидуальная коробка в строке 1, столбец 1 для имени, или строка 2, столбец 1 для Фамилия и т.д.

Вы делаете то же самое с поля ввода.

На рисунке ниже показаны столбцы, а оранжевые - строки.

grid layout

Итак, подведем итог;

  • Используйте Miglayout для вашего макета высокого уровня. Это похоже на использование таблицы в HTML.
  • Используйте другие менеджеры макетов для размещения элементов внутри полей сетки, которые предоставляет Miglayout.
0

Лучший выбор использует GridBag макет, как у вас есть немного сложный интерфейс и GridBag расположение обеспечивает всю необходимую поддержку, необходимую для того чтобы достигнуть точного UI.You придется использовать родительской панели, а затем ребенок панели в нем. В каждой панели вам нужно будет добавить отдельные макеты GridBag. Вы можете добавить вставки и необходимые растущие, чтобы достичь того, чего вы хотите.

+0

GridBagLayout работает, но ужасно подходит для поддержания. Я бы избегал этого, если это было возможно - есть намного лучшие альтернативы. –

+1

@MichaelBorgwardt При правильном использовании 'GridBagLayout' не сложно поддерживать.Многие разработчики пытаются использовать «gridx/gridy» с абсолютными значениями, что затрудняет его поддержание. Использование относительных значений для этих полей на самом деле делает его довольно простым в обслуживании и предлагает довольно приличный макет. –

0

Как указано в предыдущем комментарии, я бы использовал MigLayout в этом проекте. Поскольку вы можете использовать split, span и wrap после каждого поля или текстового поля, чтобы получить правильный макет. Вы также можете отладить Miglayout и посмотреть, где ваш макет правильный или неправильный.

скачать последнюю версию MigLayout здесь: http://www.migcalendar.com/miglayout/versions/

при использовании затмения,

  • сохранить его в папке Lib в папке проекта.
  • сконфигурируйте путь сборки проекта, но добавьте файл jar в путь к классам.
  • Затем вы должны установить макет для MigLayout.

panel.setLayout(new MigLayout());

или отлаживать макет - panel.setLayout(new MigLayout("debug"));

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