2014-08-04 2 views
0

JList가 포함 된 JPanel을 JFrame의 JTabbedPane에 추가하면 JList가 표시되지 않습니다. 버튼 및 레이블과 같은 다른 모든 물건 표시 있지만 목록JList가 JTabbedPane에서 손실되었습니다.

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)... 
} 

컨트롤러의 목록 코드 (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; 
} 

답변

0

JScrollPane (JList은 그 자체로 스크롤 기능을 제공하지 않습니다. 또한 최소 및 선호 크기를 설정하는 것이 좋습니다.

패널에 BorderLayout 레이아웃 관리자가있는 경우에만 add(list, BorderLayout.NORTH)을 사용할 수 있습니다 (게시 한 코드에서 알 수 없음 - 확인).

예 :

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); 
+0

죄송합니다, 가능한 한 코드로 읽을 수 있도록했습니다. borderlayout을 사용하고 최소 크기를 설정했습니다. 미리 스크롤 페이스를 추가하려고합니다. 편집 : 스크롤 패널 추가가 작동하지 않았습니다. – user3535989

+0

목록에 API에 구현 된 좌표와 행 및 힌트가 API에 구현되어 있지 않은 경우이 대답은 잘못되었습니다. – mKorbel

+0

@mKorbel 'JList'가 아닌'JScrollPane'의 크기를 설정하도록 제안했습니다. '에스. – icza