java - 我的第二个 JPanel 去哪里了?

标签 java swing jframe jscrollpane

我正在尝试编写一个基本的 GUI 应用程序:它只是一个带有文本框和一些按钮的可滚动窗口。我已按如下方式设置 JFrameJScrollPane:

public class MainFrame extends JFrame {
    public MainFrame() {
        this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS));
        JScrollPane scrollPane = new JScrollPane();
        JPanel contentPanel = new JPanel(); contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.PAGE_AXIS));

        contentPanel.setPreferredSize(new Dimension(600,1600));
        scrollPane.setViewportView(contentPanel);
        this.setContentPane(scrollPane);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        scrollPane.getViewport().add(new PCData());
        scrollPane.getViewport().add(Box.createRigidArea(new Dimension(0,100)));
        scrollPane.getViewport().add(new PCData());

        this.validate();
        this.setSize(625,800);
        this.setVisible(true);
    }

    public static void main(String[] args) {new MainFrame();}
}

其中类PCData如下:

public class PCData extends JPanel {
    public PCData() {
        this.setSize(new Dimension(600,300));
        this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        this.add(new JTextField());

        JPanel nameData = new JPanel();
        nameData.setLayout(new BoxLayout(nameData, BoxLayout.LINE_AXIS));
        nameData.add(new JTextField());
        nameData.add(Box.createRigidArea(new Dimension(5, 0)));
        nameData.add(new JTextField());
        this.add(nameData);
    }
}

然而,尽管首选大小,但我最终只显示了两个 PCData 区域之一。内容 Pane 不可滚动。但是,如果我删除这三行:

//scrollPane.getViewport().add(new PCData());
//scrollPane.getViewport().add(Box.createRigidArea(new Dimension(0,100)));
//scrollPane.getViewport().add(new PCData());

JScrollPane 再次变得可滚动。为什么会发生这种情况?如何才能显示两个 PCData 面板? (请注意:我正在寻找为什么和如何,而不仅仅是如何。)

最佳答案

scrollPane.getViewport().add(new PCData());
scrollPane.getViewport().add(Box.createRigidArea(new Dimension(0,100)));
scrollPane.getViewport().add(new PCData());

只能将单个组件添加到视口(viewport)。

所以你需要创建一个面板。将 3 个组件添加到面板中。然后将面板添加到视口(viewport)。

关于java - 我的第二个 JPanel 去哪里了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16706210/

相关文章:

java - UnitTesting Spring Boot 中 Unresolved 依赖关系

java - 在java : java. lang.NumberFormatException中解析 float 时出现问题:对于输入字符串: "[60.0]"

具有双值的 Java CompareTO

java - 将 Jfreechart 组件中的点转换为屏幕值

java - 按下 X 按钮时复选框状态更改

java - 使用 JSch 通过按钮发送命令

java - Flying Saucer 字体粗细不显示

java - JTextArea 上的自动文本格式设置

java - 更换 JPanel 时遇到错误

java - 如何在按下窗口关闭按钮时最小化 jFrame?