Почему кнопки go отключены от экрана в Flow Layout? - PullRequest
0 голосов
/ 11 февраля 2020

Я изучаю макет потока из Head First Java, и я пытаюсь сделать так, чтобы кнопки оборачивались так, как написано Flow Layout (слева направо, сверху вниз).

import javax.swing.*;
import java.awt.*;
public class Flow {
    public static void main(String[] args) {
        Flow gui = new Flow();
        gui.go();
    }
    public void go() {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        JButton buttonOne = new JButton("hello");
        JButton buttonTwo = new JButton("this is");
        JButton buttowThree = new JButton("woody");

        panel.add(buttonOne);
        panel.add(buttonTwo);
        panel.add(buttonThree);

        frame.getContentPane().add(BorderLayout.EAST, panel);
        frame.setSize(200,200);
        frame.setVisible(true);
    }
}

Однако при настройке панели в области EAST рамки кнопки go не отображаются на экране и не перемещаются вокруг. Если я установлю панель на область NORTH или SOUTH, я вижу только две кнопки. Если я установлю панель на область CENTER, они ДЕЙСТВИТЕЛЬНО обернутся и могут видеть все их ясно. Почему это?

1 Ответ

1 голос
/ 11 февраля 2020

Если вы добавляете компонент к кадру BorderLayout, области East и West позволят компоненту получить предпочтительную ширину. Поскольку панель содержит три кнопки и размещает их рядом, предпочтительной шириной панели является ширина трех кнопок рядом. Следовательно, это происходит "за кадром", поскольку это предпочтительная ширина. Если вы вместо этого нажмете кнопку на рамке в области EAST и заполните ее достаточным количеством текста, произойдет то же самое.

Область CENTER получает все, что осталось от других регионов не занято уже. Так как это политика области CENTER, панель NOT получает свою предпочтительную ширину или высоту, поэтому компоненты панели оборачиваются.

Что касается областей NORTH и SOUTH go, панель получит предпочтительную высоту, которая является высотой самого высокого компонента (в примере все кнопки такой же высоты). Поэтому он не видит причин для переноса. Однако панель НЕ получает свою предпочтительную ширину. Поэтому кнопки «обрезаются», так как максимальная ширина панели может быть равна рамке. Вы заметите, что при изменении размера рамки на экране появятся кнопки, когда на панели появится свободное место.

...