【问题标题】:Can't see scroll pane in label - Swing在标签中看不到滚动窗格 - Swing
【发布时间】:2018-12-04 15:11:32
【问题描述】:

我有一个带有两个框的 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 是如何设计的:

【问题讨论】:

标签: java swing user-interface jlabel jscrollpane


【解决方案1】:
drawView.setPreferredSize(new Dimension(800,20));

去掉所有的 setPreferredSize() 语句。

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

当组件的首选大小大于组件的大小时,将出现滚动条。因此,当您将组件添加到面板时,首选尺寸需要能够动态更改。

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

如果在将组件添加到 BorderLayout 时未指定约束,则会将其放置在 CENTER 中。然而,在 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 行后滚动条会出现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2021-03-18
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多