JScrollPane中的JList会破坏JPanel的高度

时间:2012-04-04 19:25:18

标签: height jpanel jscrollpane jlist border-layout

我有一个奇怪的问题,我似乎无法解决。我有一个JList,如果有更多项目,则必须能够滚动才能显示。但是,如果我将JList放在JScrollPane中,它就不会使用它所在的EAST部分的BorderLayout部分的完整高度。

没有JScrollPane的示例:

public UsersPanel(){
    String[] userList = new String[]{"Foo","Bar","Foo","Bar","Foo","Bar","Foo","Bar","Foo","Bar","Foo","Bar","Foo","Bar"};
    JList users = new JList(userList);
    add(users);
}

Example without JScrollPane

JScrollPane的示例:

public UsersPanel(){
    String[] userList = new String[]{"Foo","Bar","Foo","Bar","Foo","Bar","Foo","Bar","Foo","Bar","Foo","Bar","Foo","Bar"};
    JList users = new JList(userList);

    JScrollPane sp = new JScrollPane(users);

    add(sp);
}

Example with JScrollPane

我想要一个JList利用BorderLayout的EAST部分的完整可用高度。我已尝试将JList包裹在另一个JPanel内,但这也无法解决我的问题。

2 个答案:

答案 0 :(得分:1)

使用setVisibleRowCount()方法设置Jlist中的可见行数。     users.setVisibleRowCount(10);

答案 1 :(得分:0)

我之前成功使用的一个hack是将ComponentListener添加到JList / JScrollPane的父组件,并且当它更改时通过(伪代码)setPreferredSize(getPreferredSize)重置JList和/或Jscrollpane的首选大小()。width,parentHeight)