下面是我创建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);
}
答案 0 :(得分:5)
因为JFrame
的内容窗格的默认布局管理器是BorderLayout
并且直接添加到它将填充整个可用空间(即中心)框架的内容窗格。另一方面,JPanel
的默认布局管理器为FlowLayout
。 FlowLayout
类将组件放在一行中,其大小按其首选大小排列。因此,将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));