Java 在label-Swing中看不到滚动窗格

Java 在label-Swing中看不到滚动窗格,java,swing,user-interface,jlabel,jscrollpane,Java,Swing,User Interface,Jlabel,Jscrollpane,我有一个带有两个框的GUI:一个文本区域和一个标签 带有工作滚动条的第一个框: public class ResultView { private JTextArea resultsTextArea; private JPanel resultsPanel; private JScrollPane scrollPane; public ResultView() { createGUI(); connectPanel();

我有一个带有两个框的GUI:一个文本区域和一个标签

带有工作滚动条的第一个框:

public class ResultView {
    private JTextArea resultsTextArea;
    private JPanel resultsPanel;
    private JScrollPane scrollPane;

    public ResultView() {
        createGUI();
        connectPanel();
    }

    private void createGUI() {
        resultsTextArea = new JTextArea("Command results:");
        resultsTextArea.setPreferredSize(new Dimension(380, 2000));
        resultsTextArea.setBackground(Color.BLACK);
        resultsTextArea.setForeground(Color.WHITE);
        resultsTextArea.setEditable(false);

        scrollPane = new JScrollPane(resultsTextArea);
        scrollPane.setPreferredSize(new Dimension(400, 300));
    }

    private void connectPanel() {
        resultsPanel = new JPanel();
        resultsPanel.add(scrollPane);
    }
public class DrawView {
    private JLabel drawView;
    private JPanel drawViewPanel;
    private JPanel drawViewPaintPanel;
    private int currentNumWagons;
    private int currentTrain = -1;
    private int OFFSET = 100;
    private int TRAINLENGTH = 100;
    private JScrollPane scrollPane;

    public DrawView() {
        createGUI();
        connectPanel();
    }

    private void createGUI() {
        drawView = new JLabel("DrawView:");
        drawView.setPreferredSize(new Dimension(800,20));

        drawViewPaintPanel = new JPanel();
        drawViewPaintPanel.setPreferredSize(new Dimension(790, 280));

        scrollPane = new JScrollPane(drawView);
        scrollPane.setPreferredSize(new Dimension(800,300));
    }

    private void connectPanel() {
        drawViewPanel = new JPanel(new BorderLayout());
        drawViewPanel.add(drawView, BorderLayout.NORTH);
        drawViewPanel.add(drawViewPaintPanel, BorderLayout.CENTER);
        drawViewPanel.add(scrollPane);
    }
第二个未显示滚动条的框:

public class ResultView {
    private JTextArea resultsTextArea;
    private JPanel resultsPanel;
    private JScrollPane scrollPane;

    public ResultView() {
        createGUI();
        connectPanel();
    }

    private void createGUI() {
        resultsTextArea = new JTextArea("Command results:");
        resultsTextArea.setPreferredSize(new Dimension(380, 2000));
        resultsTextArea.setBackground(Color.BLACK);
        resultsTextArea.setForeground(Color.WHITE);
        resultsTextArea.setEditable(false);

        scrollPane = new JScrollPane(resultsTextArea);
        scrollPane.setPreferredSize(new Dimension(400, 300));
    }

    private void connectPanel() {
        resultsPanel = new JPanel();
        resultsPanel.add(scrollPane);
    }
public class DrawView {
    private JLabel drawView;
    private JPanel drawViewPanel;
    private JPanel drawViewPaintPanel;
    private int currentNumWagons;
    private int currentTrain = -1;
    private int OFFSET = 100;
    private int TRAINLENGTH = 100;
    private JScrollPane scrollPane;

    public DrawView() {
        createGUI();
        connectPanel();
    }

    private void createGUI() {
        drawView = new JLabel("DrawView:");
        drawView.setPreferredSize(new Dimension(800,20));

        drawViewPaintPanel = new JPanel();
        drawViewPaintPanel.setPreferredSize(new Dimension(790, 280));

        scrollPane = new JScrollPane(drawView);
        scrollPane.setPreferredSize(new Dimension(800,300));
    }

    private void connectPanel() {
        drawViewPanel = new JPanel(new BorderLayout());
        drawViewPanel.add(drawView, BorderLayout.NORTH);
        drawViewPanel.add(drawViewPaintPanel, BorderLayout.CENTER);
        drawViewPanel.add(scrollPane);
    }
你知道如何解决这个问题吗?我需要解决这个问题,因为操作按钮正在向标签添加列车,当添加两列以上列车时,第三列列车将位于标签下方。我将在此处添加我的GUI图片,让您了解我的GUI是如何设计的:

去掉所有setPreferredSize语句

布局管理器的工作是根据添加到配电盘的构件确定配电盘的大小

drawViewPanel.add(drawViewPaintPanel, BorderLayout.CENTER);
drawViewPanel.add(scrollPane);
当首选组件大小大于组件大小时,将显示滚动条。因此,在向配电盘添加组件时,首选尺寸需要能够动态更改

drawViewPanel.add(drawViewPaintPanel, BorderLayout.CENTER);
drawViewPanel.add(scrollPane);
如果在向BorderLayout添加组件时未指定约束,则布局将放置在中心。但是,中心只能显示单个组件,因此滚动窗格将取代drawViewPaintPanel

resultsTextArea = new JTextArea("Command results:");
resultsTextArea.setPreferredSize(new Dimension(380, 2000));
对于JTextArea,您可以使用以下方法建议首选尺寸:

resultsTextArea = new JTextArea(5, 30);
resultsTextArea.setText("Command results:");
//resultsTextArea.setPreferredSize(new Dimension(380, 2000));

文本区域现在将有5行文本。5行之后将显示滚动条。

请注意,drawViewPanel.addscrollPane等同于drawViewPanel.addscrollPane、BorderLayout.CENTER。滚动条不显示,因为面板上没有内容。。。?尝试设置滚动条策略:1,以便更快地获得更好的帮助,添加或。2见“是”。