Java 看不到JPanel

Java 看不到JPanel,java,swing,jpanel,Java,Swing,Jpanel,我想知道为什么我不能在我的控制面板上看到topPanel 这是我的密码: import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTe

我想知道为什么我不能在我的控制面板上看到topPanel

这是我的密码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class GUI {

private JFrame frame;
private JTextArea textArea;
private JPanel topPanel;
private JPanel controlPanel;
private JLabel topLabel;

void createScreen() {

    frame = new JFrame("Hello");
    frame.setSize(600,600);
    frame.setLayout(new GridLayout(3,1)); 
    controlPanel = new JPanel();
    controlPanel.setLayout(new FlowLayout());
    controlPanel.setBackground(Color.GREEN);
    topLabel = new JLabel("WELCOME TO MY TRAINING", JLabel.CENTER);

    frame.add(topLabel);
    frame.add(controlPanel);

    topPanel = new JPanel();

    BorderLayout borderLayout = new BorderLayout();

    borderLayout.setHgap(10);
    borderLayout.setVgap(10);

    topPanel.setLayout(borderLayout);
    topPanel.setBackground(Color.BLUE);
    topPanel.setSize(75,300);
    textArea = new JTextArea();
    textArea.setSize(25, 25);

    topPanel.add(textArea, BorderLayout.CENTER);

    controlPanel.add(topPanel);

    frame.setVisible(true);

}

public static void main(String[] args) {
     GUI gui = new GUI();
     gui.createScreen();
}

}

FlowLayout使用组件首选大小,而不是为其设置的实际大小。 要解决问题,请将首选大小设置为topPanel,而不是其大小

topPanel.setPreferredSize新尺寸75300

但我的建议是避免这样设置大小,而是让TextArea通过如下方式指定其行数和列数来确定大小:

topPanel.setLayout(borderLayout);
topPanel.setBackground(Color.BLUE);
textArea = new JTextArea(10, 15);

我错了,我认为topLabel也是一个面板。Comment deleted.frame.pack?如果分析调试输出中的Swing布局信息,这总是一个很好的信息。因此,在java控制台中按[Ctrl]+[Shift]+[F1],您将获得布局输出。有关此调试提示和其他调试提示,请参阅另一种调试方法,以便为面板设置一些花哨的颜色。颜色允许您查看显示的面板和缺少的面板。谢谢您的回答。我仍然有点困惑,在我看来,文本区域始终是topPanel的整个大小。这是因为我在使用flowlayout吗?是的。如果您将BorderLayout设置为controlPanel,它将占用整个controlPanel。@isaace:您将需要阅读布局管理器教程,您可以在此处找到这些教程和其他Swing资源的链接:。