Java BorderLayout PAGE_END перезаписывает ЮГ - PullRequest
0 голосов
/ 14 июля 2020

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

Код частично на немецком языке, поэтому, чтобы избежать путаницы, вот аннотация:

JPanel south имеет 3 кнопки, которые отображаются в центре. Дата JLabel состоит из 10 символов и используется с основной панелью JPanel.PAGE_END

Without the PAGE_END JLabel

ONLY change is the JLabel added to MainJPanel.PAGE_END

edit: Вот как это выглядит без PAGE_END

publi c class bsp {

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setSize(1200,600);
    JPanel panelall = new JPanel();
    JPanel panelsouth = new JPanel();
    JPanel panelsouthsouth = new JPanel();
    JPanel panelsoutheast = new JPanel();
    
    
    
    panelall.setLayout(new BorderLayout());
    panelsouth.setLayout(new BorderLayout());
    panelsouthsouth.setLayout(new FlowLayout());
    panelsoutheast.setLayout(new BorderLayout());
    
    JButton button1 = new JButton("Button1");
    JButton button2 = new JButton("Button2");
    JButton button3 = new JButton("Button3");
    
    JLabel bottomright = new JLabel ("I should be even further in the bottom right corner");
    
    panelsoutheast.add(bottomright,BorderLayout.EAST);
    panelsouthsouth.add(button1);
    panelsouthsouth.add(button2);
    panelsouthsouth.add(button3);
    panelsouth.add(panelsoutheast,BorderLayout.EAST);
    panelsouth.add(panelsouthsouth, BorderLayout.SOUTH);
    panelall.add(panelsouth, BorderLayout.SOUTH);
    frame.add(panelall);
    frame.setVisible(true);
    

}

}

1 Ответ

2 голосов
/ 14 июля 2020

Вы не должны смешивать абсолютные и относительные константы позиционирования

Извините, это не прозвучало раньше, но BorderLayout javado c довольно ясно говорит об этом:

Смешивание как абсолютных, так и относительных констант позиционирования может привести к непредсказуемым результатам. Если вы используете оба типа, относительные константы будут иметь приоритет. Например, если вы добавляете компоненты с использованием констант NORTH и PAGE_START в контейнер с ориентацией LEFT_TO_RIGHT, будет размещен только PAGE_START.

Абсолютные константы позиционирования: NORTH, SOUTH, EAST и WEST. Константы относительного позиционирования: PAGE_START, PAGE_END, LINE_START и LINE_END. Не смешивайте их: если вы начинаете с одного типа, продолжайте его использовать.

Если вы хотите получить что-то вроде этого:

+---------------+
| HEADER        |
+---------------+
| MAIN CONTENT  |
+---------------+
| FIRST FOOTER  |
+---------------+
| SECOND FOOTER |
+---------------+

Используйте следующий вид кода:

JPanel mainPanel = getContentPane();
JPanel footerPanel = new JPanel();

mainPanel.add(new JLabel("HEADER"), NORTH);
mainPanel.add(new JLabel("MAIN CONTENT"), CENTER);
mainPanel.add(footerPanel, SOUTH);
footerPanel.add("FIRST FOOTER", NORTH);
footerPanel.add("SECOND FOOTER", SOUTH);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...