在标签中看不到滚动窗格-Swing

时间:2018-12-04 15:11:33

标签: java swing user-interface jlabel jscrollpane

我有一个带有两个框的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);
    }

任何想法如何解决此问题?我需要解决此问题,因为操作按钮正在将火车添加到标签中,当添加两个以上的火车时,第三列火车将位于标签下方。我将在下面添加我的GUI的图片,以让您了解我的GUI的设计方式:

GUI

1 个答案:

答案 0 :(得分:1)

drawView.setPreferredSize(new Dimension(800,20));

摆脱所有setPreferredSize()语句。

布局管理器的工作是根据添加到面板中的组件确定面板的大小。

当组件的首选大小大于组件的大小时,将显示滚动条。因此,在将组件添加到面板时,首选大小需要能够动态更改。

drawViewPanel.add(drawViewPaintPanel, BorderLayout.CENTER);
drawViewPanel.add(scrollPane);

如果在将组件添加到BorderLayout时未指定约束,则将放置在CENTER中。但是,只能在中心显示一个组件,因此scrollPane替换了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行后,滚动条将出现。