Использование Java и его библиотеки SWING - PullRequest
0 голосов
/ 12 ноября 2009

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

Вот как бы я хотел, чтобы форма выглядела: текст ссылки

У кого-нибудь есть идеи, как это сделать, потому что я в тупике?

Спасибо.

Ответы [ 9 ]

1 голос
/ 13 ноября 2009

Самый простой в использовании менеджер раскладки, который я пробовал, по крайней мере для выполнения чего-то подобного, это DesignGridLayout . При этом код будет выглядеть примерно так:

layout.row().grid(new JLabel("JLabel1")).add(new JTextField());
layout.row().grid(new JLabel("JLabel2")).add(new JTextField());
...
layout.row().grid(new JLabel("JLabel5")).add(new JTextField());
layout.row().center().add(new JButton("JButton"));
1 голос
/ 12 ноября 2009

Взгляните на Таблица макетов . Это намного проще в использовании, чем почти все менеджеры по умолчанию. Ваша форма будет очень проста в создании.

1 голос
/ 13 ноября 2009

Поначалу GridBagLayout может показаться сложным, но он очень гибкий и его стоит узнать.

JButton button = ...;

JLabel[] labels = new JLabel[]  {
    new JLabel("Label 1"),
    ...
};

JTextField[] fields = new JTextField[] {
    new JTextField(15),
    ...
};

JPanel[] rows = new JPanel[] {
    new JPanel(),
    ...
}

Container container = getContentPane(); 
container.setLayout(new GridBagLayout());
GridBagConstraints cons = new GridBagConstraints();

// Layout each row's contents(label + text field)
cons.fill = GridBagConstraints.BOTH;
cons.insets = new Insets(2, 8, 2, 8);
for (int i = 0; i < rows.length; ++i) {
    rows[i].setLayout(new GridBagLayout());
    // Labels get 30% of the row's extra horizontal space.
    cons.weightx = 0.3;
    rows[i].add(labels[i], cons); 

    // Text fields gets 70% of the row's extra horizontal space.
    cons.weightx = 0.7;
    rows[i].add(fields[i], cons);

     // Add each row to the panel, top to bottom
     // Each row takes up all of the horizontal space.
    cons.gridx = 0;
    cons.weightx = 1;
    container.add(rows[i], cons);
    cons.gridx = GridBagConstraints.RELATIVE;
}

// Add the button at the bottom.
// Dont let button get any extra horizontal space (so it won't stretch)
cons.gridx = 0;
cons.weightx = 0;
cons.fill = GridBagConstraints.NONE;
container.add(button, cons);
1 голос
/ 12 ноября 2009

За исключением использования gridbaglayout, его можно выполнить с помощью borderlayout, gridlayout и flowlayout. Начните с того, что разбейте форму на большие визуальные элементы и создайте под-макеты под верхними уровнями.

Например, в этом случае я бы сделал это:

  1. Разделите форму на две вертикальные части с помощью сетки (или границы); верхняя (или центральная) часть для надписей и текстовых полей, нижняя (или южная) для кнопки.
  2. В верхней части сделайте разметку потока с выравниванием по центру или другую разметку сетки, чтобы расположить надписи и текстовые поля.
  3. В нижней части используйте разметку с выравниванием по центру для кнопки.

Я работал с Java Swing в течение 4 лет, и поначалу было сложно создавать макеты, но это становится проще, чем больше вы практикуетесь.

1 голос
/ 12 ноября 2009

Самым простым для ваших целей является GridLayout. Как сказал Аарон, у Netbeans есть отличный конструктор графического интерфейса, если вы не хотите изучать менеджеры компоновки.

0 голосов
/ 13 ноября 2009

Мне очень нравится инструмент JGoodies Forms для разметки простых (и сложных) форм. С ним легко работать и есть отличные примеры. Если вы хотите что-то действительно красивое, вы можете использовать один из них и чувствовать тоже.

0 голосов
/ 12 ноября 2009

Я бы сделал основную панель с BorderLayout.

Южная область будет содержать панель с кнопкой.

Центральная область будет содержать панель с компоновкой сетки, компоновкой мешка с сеткой или каким-то другим макетом блока, который будет размещать ваши метки и текстовые поля.

0 голосов
/ 12 ноября 2009

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

0 голосов
/ 12 ноября 2009

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

Другой альтернативой является использование GUI Builder, у Netbeans есть тот, который действительно впечатлил меня, когда я взглянул на него в прошлом году. Я больше не работаю на Java, поэтому не могу предоставить вам больше деталей.

Netbeans GUI Builder (ранее Матисс)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...