JScrollPane绘制组件本身

时间:2016-04-26 17:43:20

标签: java swing user-interface jscrollpane

我在JTabbedPane选项卡中有一个JScrollPane。在JScrollPane中,我放置了一个背景为红色且显式设置大小的JPanel。

这就是我得到的:

enter image description here

enter image description here

请注意,在第二个图像中,容器框架已调整大小,组件在滚动条元素下绘制

这里发生了什么?我已经尝试了所有相关组件的布局管理器的每个组合(以及除JPanel之外的组件 - 最终我想要几个JEditorPane),除了一个大的空白矩形之外我无法得到任何东西(它是背景吗?哪个?)

代码:

在主JFrame子类中:

// Called once on startup/layout.
public void refreshGUIState() {
    for (int i = 0; i < client.getFrameStackLength(); i++) {
        InferenceFrame frame = client.getFrame(i);
        JScrollPane pane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                                           JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        JPanel wtf = new JPanel();
        pane.setBackground(Color.YELLOW);
        wtf.setBackground(Color.red);
        wtf.setSize(100,100);
        wtf.setPreferredSize(wtf.getSize());
        pane.add(wtf);
        workspace.addTab(Integer.toString(i), pane);
    }
}

public GuiClient() throws CliException, ParticleSourceException {
    super("L4 Interactive Prover");
    setSize(800,600);

    mainArea = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);
    mainArea.setDividerSize(2);
    mainArea.setBackground(Color.DARK_GRAY);
    getContentPane().add(mainArea);

    /* ... menu bar init ... */

    toolspace = new JPanel();
    workspace = new JTabbedPane();
    mainArea.add(toolspace);
    mainArea.add(workspace);

    this.validate();
    refreshGUIState();
}

编辑:怀疑JScrollPane在添加第一个子节点时不知何地创建了一个视口,正如预期的那样,我也尝试了三参数构造函数。同样的行为。

重新编辑:除了我错误并留在add()调用中。哎呦。看起来就是这样。

1 个答案:

答案 0 :(得分:4)

而不是

pane.add(wtf);

你需要

pane.setViewportView(wtf);

初始化JScrollPane时也可以这样做:

JScrollPane pane = new JScrollPane(wtf);

或者,在您的情况下:

JScollPane pane = new JScrollPane(wtf, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);