Java Swing: почему мои панели многоуровневые? Я не вижу свою первую панель

Я пытаюсь, чтобы одна панель отображалась под другой (textPanel отображалась под mainPanel).

Но вместо этого textPanel появляется поверх mainPanel:

    FlatLightLaf.setup();
    FlatLightLaf.supportsNativeWindowDecorations();
    UIManager.setLookAndFeel(new FlatLightLaf()); 
    
    JFrame frame = new JFrame();
    frame.setTitle("Title");
    frame.setSize(640, 480);
    
    JMenuBar menuBar = new JMenuBar();
    JMenu menu = new JMenu("File");
    JMenuItem menuFileSave = new JMenuItem("Save");
    menuFileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
    
    menu.add(menuFileSave);
    
    menuBar.add(menu);
    
    FlowLayout mainLayout = new FlowLayout(FlowLayout.LEFT);
    
    frame.setJMenuBar(menuBar);
    
    JPanel mainPanel = new JPanel(new BorderLayout());
    
    String datesString[] = {"Tuesday May-03-2022", "Monday May-02-2022"};
    @SuppressWarnings("rawtypes")
    JComboBox dateDropDown = new JComboBox<>(datesString);
    dateDropDown.setFont(new Font("Calibri", Font.PLAIN, 17));
    dateDropDown.setVisible(true);
    
    mainPanel.add(dateDropDown);

    mainPanel.setVisible(true);
    frame.add(mainPanel);
    
    JPanel textPanel = new JPanel(new BorderLayout());
    
    JTextArea textArea = new JTextArea();
    textPanel.add(textArea);

    textPanel.setVisible(true);
    frame.add(textPanel);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

Как мне убедиться, что textPanel идет ниже mainPanel в своей собственной строке/строке, а не поверх нее?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По умолчанию при добавлении одного компонента без дополнительных аргументов в JFrame данный компонент будет занимать всю клиентскую область, поскольку JFrame по умолчанию использует BorderLayout. Таким образом, ваше решение состоит в том, чтобы добавить использовать в качестве дополнительного аргумента, чтобы добавить его внизу макета:

frame.add(textPanel, BorderLayout.PAGE_END);

Другие вопросы по теме