Java Swing:为什么我的面板是分层的?我看不到我的第一个面板

Java Swing: Why are my panels layered? I can't see my first panel

我正在尝试让一个面板出现在另一个面板下方(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 row/line,而不是超越它?

默认情况下,将一个组件添加到 JFrame 时,在没有其他参数的情况下,相关组件将占据整个客户区,因为 JFrame 使用 BorderLayout 默认。因此,您的解决方案是 使用 进一步的参数,告诉它在布局的底部添加它:

frame.add(textPanel, BorderLayout.PAGE_END);