JList在JTabbedPane中丢失了

时间:2014-08-04 12:39:16

标签: java swing jpanel jlist

因此,出于某种原因,当我将包含JList的JPanel添加到JTabbedPane(在JFrame中)时,JList不会显示。所有其他的东西,如按钮和标签显示,但不是列表

JFrame代码:

public View(Model m, Controller c) {
    model = m;
    controller = c;
    co=getContentPane();
    co.setLayout(new BorderLayout());   

    tabbedPane = new JTabbedPane();
    vp = new VragenPanel(model, controller);
    cp = new CategoriePanel(model, controller);
    tabbedPane.add("Vragen", vp);
    tabbedPane.add("Categorie", cp);
    co.add(tabbedPane, BorderLayout.NORTH);

    this.setSize(400,400);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

JPanel代码:

public CategoriePanel(Model m, Controller c) {        
    this.setLayout(new BorderLayout());

    list = controller.getCategorieList();
    this.add(list, BorderLayout.NORTH); 
    ...
    b1 = new JButton(etc)...
}

Controller的列表代码(使用defaultlistmodel):

    private DefaultListModel dlm=new DefaultListModel();
    private JList lijst=new JList(dlm);
    ...
public JList getCategorieList() {
    dlm.ensureCapacity(100);
    for(int i=0;i<model.getCategoriën().size();i++) {
        dlm.addElement(model.getCategoriën().get(i).getNaam();
    }
    return lijst;
}

1 个答案:

答案 0 :(得分:0)

您必须将JList放入JScrollPaneJList本身不提供滚动功能)。此外,最好设置最小和首选大小。

如果您的小组有一个add(list, BorderLayout.NORTH)布局管理员(无法通过您发布的代码告知 - 请检查),您只能使用BorderLayout

示例:

JList list = controller.getCategorieList();
JScrollPane sp = new JScrollPane(list);
Dimension d = new Dimension(100, 100);
sp.setMinimumSize(d);
sp.setPreferredSize(d);
this.add(list, BorderLayout.NORTH);