2012-04-04 57 views
0

我有一个奇怪的问题,我似乎无法解决。我有一个JList必须能够滚动,如果有更多的项目,然后可以显示。但是,如果我把JListJScrollPane,它不利用BorderLayout它在的EAST部分的整个高度JScrollPane中的JList打乱JPanel高度

例无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它在东部区域的全部可用的高度。我已经试过我的包裹里面JList另一个JPanel,但这并不无论是解决我的问题。

回答

0

我以前成功使用过的一个黑客手段是向JList/JScrollPane的父组件添加ComponentListener,并且随着它改变,通过(伪代码)setPreferredSize()重置JList和/或Jscrollpane的首选大小getPreferredSize()。width,parentHeight)

1

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