2010-02-21 2 views
2

상자 레이아웃을 사용하여 임의의 레이블 목록이있는 패널에 JScrollPane을 사용하고 싶습니다. 표시 할 항목 (레이블)이 너무 많으면 스크롤바가 표시되도록하려고합니다.JScrollPane BoxLayout로 레이블 집합을 포함하는 패널

패널에 JScrollPane을 추가하고 레이블을 추가했지만 스크롤 막대가 표시되지 않습니다.

아이디어가 있으십니까? TIA

답변

1

는 이런 종류의 일을 위해, 당신은 일반적으로 사용하는 거라고 JList 또는 JTable (사용자 정의 렌더링을 필요로하는 경우).

+0

예 가능합니다. 나는 이것을 고려하고있다. 필자의 경우 키보드 지향적 인 게임이기 때문에 레이블 세트를 통해 List로 구현하는 것이 더 많은 코드입니다. 그러나 당신 말이 맞습니다. 나는 이렇게 할 수있다. – sproketboy

1

당신이 패널의 적절한 사이즈를 다시 계산하는 강제로 항목을 추가 한 후 JScrollPanevalidate() 또는 revalidate() 전화 있는지 확인합니다.

+0

그게 나를 위해 작동하지 않았다. 아래를 참조하십시오. – sproketboy

0

다음은 내가 한 일입니다. 에서

JPanel midPanel = new JPanel(); 
midPanel.setLayout(new BoxLayout(midPanel, BoxLayout.Y_AXIS)); 
midPanel.add(new JLabel("<html><u>Label</u>")); 
Box box = Box.createVerticalBox(); 
for (Item item : data.getInventory()) { 
    inventory.add(box.add(new JLabel(item.getName()))); 
} 

JScrollPane jscrlpBox = new JScrollPane(box); 
midPanel.add(jscrlpBox); 
add(midPanel, BorderLayout.CENTER); 

:

http://www.java2s.com/Code/Java/Swing-JFC/JScrollPanetoholdscrollablecomponent.htm

0

는 컨텐츠 패널의 추천 사이즈를 설정하는 기억나요?

final JFrame frame = new JFrame("Scroll Demo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(new BorderLayout()); 

    final Box textArea = Box.createVerticalBox(); 
    final JScrollPane textAreaScroll = new JScrollPane(textArea); 
    textAreaScroll.setPreferredSize(new Dimension(80,150)); /* essential! */ 
    JButton addButton = new JButton("ADD"); 
    addButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      textArea.add(new JLabel("abc")); 
      textArea.revalidate(); 
     } 
    }); 

    frame.getContentPane().add(textAreaScroll, BorderLayout.SOUTH); 
    frame.getContentPane().add(Box.createRigidArea(new Dimension(10,10)), BorderLayout.CENTER); 
    frame.getContentPane().add(addButton, BorderLayout.NORTH); 

    frame.pack(); 
    frame.setVisible(true); 

이 예제에서는 스크롤 막대가 올바르게 작동하지만 "필수"로 표시된 줄을 제거하면 더 이상 작동하지 않습니다.