Вопрос о создании JAVA GUI определенного формата - PullRequest
2 голосов
/ 01 декабря 2010

Я пытаюсь создать графический интерфейс, который выглядит примерно так:

Я знаю только, как использовать BorderLayout, в котором есть место для 5 кнопок.Север, Запад, Центр, Восток и Юг.

Поскольку мне нужно иметь 6 компонентов в верхней строке, этот подход не может работать.Я не уверен, как сделать так, чтобы я мог иметь более 1 компонента в верхней строке.Есть ли другие макеты, которые я могу использовать, или есть какой-то способ манипулирования BorderLayout, чтобы я мог поместить 6 компонентов в верхнюю строку?

Ответы [ 4 ]

2 голосов
/ 01 декабря 2010

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

alt text

При включенном режиме отладки: alt text

После изменения размера окна (обратите внимание на соотношениеразмер текстовых полей остается прежним) alt text

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;

/**
 *
 * @author nicholasdunn
 */
public class InterestCalculator extends JPanel {

    public InterestCalculator() {
        super(new MigLayout("debug, fill", "align center"));
        // Make 6 components cram into one cell
        add(new JLabel("Principal:"), "split 6");
        // This textfield grows at twice the normal rate
        add(new JTextField(), "growx 200");
        add(new JLabel("Interest rate (percentage):"));
        // This one at a normal rate
        add(new JTextField(), "growx 100");
        add(new JLabel("Years:"));
        // This one at half the normal rate
        add(new JTextField(), "growx 50, wrap");

        // The row with the two buttons
        add(new JButton("Compute simple interest"), "split 2");
        add(new JButton("Compute compound interest"), "wrap");

        // The result label
        add(new JLabel("The result with simple interest would be"));
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new InterestCalculator();
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}
2 голосов
/ 01 декабря 2010

Что вам нужно сделать, так это вставить компоненты внутри других компонентов. Например, вершина (север) должна быть одна JPanel. Это JPanel будет содержать 6 компонентов наверху.

Код может выглядеть примерно так:

JPanel northPane = new JPanel();
northPane.add(new JLabel("Principle: "));
northPane.add(principleTextBox);
... and so on
mainPanel.setLayout(new BorderLayout());
mainPanel.add(northPanel, BorderLayout.NORTH);

Компонент Center, вероятно, будет другим JPanel, содержащим две центральные кнопки. А южный компонент будет другим JPanel, содержащим один JLabel или просто JLabel.

Если вам не нужно использовать BorderLayout для главной панели, может быть проще использовать BoxLayout.

1 голос
/ 01 декабря 2010

Здесь - учебник по менеджерам компоновки.

Помните, что вы всегда можете добавить несколько элементов в JPanel и применить к этому JPanel определенный макет. Затем вы можете вкладывать панели (добавлять панели внутри других панелей).

1 голос
/ 01 декабря 2010

Если бы я воссоздал этот интерфейс, я бы начал с JPanel, используя GridLayout с 3 строками и 1 столбцом.В каждом столбце я бы добавил дочерний JPanel.

Затем для каждой строки я бы использовал GridBagLayout для позиционирования компонентов.

...