установите 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);

}

person trs    schedule 25.12.2011    source источник
comment
(JPanel.)setVisible(true) Это произойдет по умолчанию для любого компонента, добавленного в видимый контейнер (например, JFrame после вызова setVisible(true)).   -  person Andrew Thompson    schedule 26.12.2011


Ответы (2)


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

person Kavka    schedule 25.12.2011

От @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));
person JOY SAM RAJ    schedule 16.03.2021