Как реализовать север и юг в одном и том же JPanel - PullRequest
0 голосов
/ 20 мая 2018

Возможно ли, чтобы север и юг составляли одно и то же JPanel?Например, я хочу, чтобы текст отображался с размером сетки 2 x 2 ниже.Как я мог изменить этот код, чтобы это произошло?Я новичок в Java Swing и не уверен, где мне искать.

public  CompView(){
super("Super");
setResizable(false);
setLocationRelativeTo(null);

JPanel northPanel = new JPanel();
JPanel middlePanel = new JPanel();
JPanel southPanel = new JPanel();

getContentPane().add(northPanel, BorderLayout.NORTH);
northPanel.add(new JLabel("TITLE", CENTER));
northPanel.setLayout(new GridLayout(2,2));
northPanel.add(new JLabel("Text: "));
northPanel.add(new JTextField());
northPanel.add(new JLabel("Text: "));
northPanel.add(new JTextField());

getContentPane().add(middlePanel, BorderLayout.CENTER);
middlePanel.setLayout(new GridLayout(2,1));
middlePanel.add(new JLabel("Title 2:", CENTER));
middlePanel.add(new JTextField());
}

Текущее изображение

enter image description here

Я бы хотелнапример, вывод будет выглядеть так:

| Super             |_|  |X|
----------------------------     --|
|          Title           |       |
----------------------------       |
| Text: | JTextField 1   | |       } North Panel
----------------------------       |
| Text: | JTextField 2   | |       |
----------------------------     --|
|         Title 2          |       |
----------------------------       } Center Panel
| | Resizable JTextField | |       |
----------------------------     --|

Надеюсь, эта диаграмма поможет.

1 Ответ

0 голосов
/ 20 мая 2018

Общая стратегия решения сложных вычислительных задач - разбить их на небольшие четко определенные управляемые задачи.Разделяй и властвуй.Это также относится и к графическому интерфейсу: разбейте конструкцию на небольшие, легко разрабатываемые контейнеры.В этом случае начните с разделения дизайна на 2 области, как вы это делали (север и юг), и разделите каждую.Например:

enter image description here

Основная идея состоит в том, чтобы разделить макет на более мелкие области, каждая из которых имеет простой отдельный макет, который может быть реализован одним менеджером макета .

Реализация северной части может выглядеть следующим образом:

//avoid extends JFrame. Use for simplification
public class CompView extends JFrame{

    CompView(){

        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel northPanel = new JPanel(new GridLayout(2,0));

        FlowLayout layout1 = new FlowLayout(FlowLayout.CENTER);
        JPanel titlePanel = new JPanel(layout1);
        titlePanel.add(new JLabel("TITLE"));
        northPanel.add(titlePanel);

        FlowLayout layout2 = new FlowLayout(FlowLayout.LEFT);
        JPanel textfieldPanel1 = new JPanel(layout2);
        textfieldPanel1.add(new JLabel("Text: "));
        JTextField txt = new JTextField();
        txt.setColumns(5);
        textfieldPanel1.add(txt);
        northPanel.add(textfieldPanel1);

        add(northPanel, BorderLayout.NORTH);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new CompView());
    }
}
...