JScrollPane 自身下的绘图组件
JScrollPane drawing components under itself
我在 JTabbedPane 选项卡中有一个 JScrollPane。在那个 JScrollPane 中,我放置了一个 JPanel,它的背景是红色的,它的大小是明确设置的。
这是我得到的:
请注意,在第二张图片中,容器框架已调整大小,组件被绘制在滚动条元素下方。
这是怎么回事?我已经为所有涉及的组件(以及 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() 调用中犯了错误并离开了。哎呀。看起来就是这样。
而不是
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);
我在 JTabbedPane 选项卡中有一个 JScrollPane。在那个 JScrollPane 中,我放置了一个 JPanel,它的背景是红色的,它的大小是明确设置的。
这是我得到的:
请注意,在第二张图片中,容器框架已调整大小,组件被绘制在滚动条元素下方。
这是怎么回事?我已经为所有涉及的组件(以及 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() 调用中犯了错误并离开了。哎呀。看起来就是这样。
而不是
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);