Java 水平滚动条不适用于JScrollPane

Java 水平滚动条不适用于JScrollPane,java,swing,jscrollpane,miglayout,Java,Swing,Jscrollpane,Miglayout,这是我使用Miglayout的应用程序插件: 这是MigLayout初始代码,布局占据主面板100%的空间: resPanel.setLayout(new BoxLayout(resPanel, BoxLayout.Y_AXIS)); mainPanel.setLayout(new MigLayout("", "[][grow][grow][]", "[][][][grow]")); mainPanel.add(new JLabel("Class expression"), "wrap");

这是我使用Miglayout的应用程序插件:

这是MigLayout初始代码,布局占据主面板100%的空间:

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) );
}
静态无效更新列表(JPanel面板,集合列表){
panel.removeAll();
对于(int i=0;i<3;i++){
for(owlclasspression:list){
字符串名称=((OWLNamedObject)p.getIRI().getShortForm();
JEditorPane jep=新的JEditorPane(“text/html”,name+“qwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq;
jep.setPreferredSize(新尺寸(200,20));
jep.setEditable(false);
jep.setOpaque(假);
新增专家组(jep);
}
}
面板。添加(框。垂直支柱(400));
}
我必须添加最后一行,以使垂直滚动条工作。如果我不添加它,那么它也会丢失,即使它有底部额外空白的副作用。如何使滚动条正常工作

jep.setPreferredSize(new Dimension(200,20));
不要硬编码首选尺寸

每个组件将根据组件的属性(文本、字体等)动态地确定自己的首选大小

然后,布局管理器可以根据每个组件的首选大小动态地确定面板的大小,并在需要时显示滚动条

此外,在完成将所有组件添加到面板后,还需要使用:

panel.revalidate();

调用布局管理器,以便计算面板的新尺寸。

要更快获得更好的帮助,请发布或。如果MCVE/SSCCE只使用J2SE布局,这会有所帮助。