水平滚动条不适用于 JScrollPane
Horisontal scrollbar not working for JScrollPane
这是我的带有 Miglayout 的应用程序插件:
这是MigLayout初始化代码,布局占主面板的100%space:
resPanel.setLayout(new BoxLayout(resPanel, BoxLayout.Y_AXIS));
mainPanel.setLayout(new MigLayout("", "[][grow][grow][]", "[][][][grow]"));
mainPanel.add(new JLabel("Class expression"), "wrap");
mainPanel.add(owlDescriptionEditor, "growx,span 3");
mainPanel.add(calcButton, "wrap");
mainPanel.add(new JLabel("Definitions found"), "span 2");
mainPanel.add(new JLabel("Target signature"), "span 2,wrap");
JScrollPane jsp = new JScrollPane(resPanel);
mainPanel.add(jsp, "growy, growx, span 2");
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
mainPanel.add(new JScrollPane(deltaList), "growx,growy,span 2");
问题是左侧列表的水平滚动条不起作用,这是带有 BoxLayout 的 JPanel,即使我为它调用了 setVerticalScrollBarPolicy。 JPanel 使用此循环动态填充:
static void updateList(JPanel panel, Collection<OWLClassExpression> list) {
panel.removeAll();
for (int i = 0; i < 3; i++) {
for (OWLClassExpression p : list) {
String name = ((OWLNamedObject) p).getIRI().getShortForm();
JEditorPane jep = new JEditorPane("text/html", name+"QWQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
jep.setPreferredSize(new Dimension(200,20));
jep.setEditable(false);
jep.setOpaque(false);
panel.add(jep);
}
}
panel.add( Box.createVerticalStrut(400) );
}
我必须添加最后一行才能使垂直滚动条正常工作。如果我不添加它,那么它也会丢失,即使它在底部有额外空 space 的副作用。如何让滚动条正常工作?
jep.setPreferredSize(new Dimension(200,20));
不要对首选尺寸进行硬编码。
每个组件将dynamcially
根据组件的属性(文本、字体等)确定自己的首选大小。
然后布局管理器可以dynamically
根据每个组件的首选大小确定面板的大小,并在需要时显示滚动条。
此外,在您将所有组件添加到面板后,您还需要使用:
panel.revalidate();
调用布局管理器以便计算面板的新尺寸。
这是我的带有 Miglayout 的应用程序插件:
这是MigLayout初始化代码,布局占主面板的100%space:
resPanel.setLayout(new BoxLayout(resPanel, BoxLayout.Y_AXIS));
mainPanel.setLayout(new MigLayout("", "[][grow][grow][]", "[][][][grow]"));
mainPanel.add(new JLabel("Class expression"), "wrap");
mainPanel.add(owlDescriptionEditor, "growx,span 3");
mainPanel.add(calcButton, "wrap");
mainPanel.add(new JLabel("Definitions found"), "span 2");
mainPanel.add(new JLabel("Target signature"), "span 2,wrap");
JScrollPane jsp = new JScrollPane(resPanel);
mainPanel.add(jsp, "growy, growx, span 2");
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
mainPanel.add(new JScrollPane(deltaList), "growx,growy,span 2");
问题是左侧列表的水平滚动条不起作用,这是带有 BoxLayout 的 JPanel,即使我为它调用了 setVerticalScrollBarPolicy。 JPanel 使用此循环动态填充:
static void updateList(JPanel panel, Collection<OWLClassExpression> list) {
panel.removeAll();
for (int i = 0; i < 3; i++) {
for (OWLClassExpression p : list) {
String name = ((OWLNamedObject) p).getIRI().getShortForm();
JEditorPane jep = new JEditorPane("text/html", name+"QWQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
jep.setPreferredSize(new Dimension(200,20));
jep.setEditable(false);
jep.setOpaque(false);
panel.add(jep);
}
}
panel.add( Box.createVerticalStrut(400) );
}
我必须添加最后一行才能使垂直滚动条正常工作。如果我不添加它,那么它也会丢失,即使它在底部有额外空 space 的副作用。如何让滚动条正常工作?
jep.setPreferredSize(new Dimension(200,20));
不要对首选尺寸进行硬编码。
每个组件将dynamcially
根据组件的属性(文本、字体等)确定自己的首选大小。
然后布局管理器可以dynamically
根据每个组件的首选大小确定面板的大小,并在需要时显示滚动条。
此外,在您将所有组件添加到面板后,您还需要使用:
panel.revalidate();
调用布局管理器以便计算面板的新尺寸。