设置JList以填充它添加到的组件的整个大小

时间:2011-12-25 21:56:28

标签: java swing jframe jpanel jlist

下面是我创建JList的代码。当它在独立的JFrame中创建时,JList会填充整个框架。但是,当我将其创建为JPanel并将其添加到JFrame时,它没有填充组件的大小,为什么?

public class ListBranchesInterface extends JPanel {
private Library theLibrary; // reference to back end
private ArrayList<LibraryBranch> branches;
private DefaultListModel dlm;
private JList list;
private JScrollPane scroll;

public ListBranchesInterface(Library theLibrary) {
    this.theLibrary = theLibrary;
    branches = new ArrayList<LibraryBranch>();
    branches.addAll(theLibrary.getLibraryBranches());

    Iterator<LibraryBranch> iter = branches.iterator();
    dlm = new DefaultListModel();
    while (iter.hasNext()) {

        dlm.addElement(iter.next().toString());

    }
    list = new JList(dlm); // create a JList from the default list model

    scroll = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); // add a scroll pane
                                                        // to the JList

    add(scroll);
    setVisible(true);

}

2 个答案:

答案 0 :(得分:5)

因为JFrame内容窗格的默认布局管理器是BorderLayout并且直接添加到它将填充整个可用空间(即中心)框架的内容窗格。另一方面,JPanel的默认布局管理器为FlowLayoutFlowLayout类将组件放在一行中,其大小按其首选大小排列。因此,将JList添加到JPanel不会填满整个可用空间。

答案 1 :(得分:0)

从@kavka 我得到了答案......事实是更改为边框布局。

JPanel As_list_panel = new JPanel();
As_list_panel.setBounds(0, 0, 200, 200);    //I think this line is unecessary. check it                                      
As_list_panel.setLayout(new BorderLayout(0, 0));