установите JList для заполнения всего размера компонента, к которому он добавлен - PullRequest
2 голосов
/ 26 декабря 2011

ниже - мой код для создания 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);

}

1 Ответ

5 голосов
/ 26 декабря 2011

Поскольку диспетчер макета по умолчанию для JFrame ' панели содержимого равен BorderLayout, и добавление непосредственно к нему заполнит все доступное пространство (т. Е. Центр) панели содержимого кадра.С другой стороны, менеджер по умолчанию для JPanel - FlowLayout.Класс FlowLayout помещает компоненты в ряд, размер которого соответствует их предпочтительному размеру.Таким образом, добавление JList к JPanel не будет заполнять все доступное пространство.

...