상자 레이아웃을 사용하여 임의의 레이블 목록이있는 패널에 JScrollPane을 사용하고 싶습니다. 표시 할 항목 (레이블)이 너무 많으면 스크롤바가 표시되도록하려고합니다.JScrollPane BoxLayout로 레이블 집합을 포함하는 패널
패널에 JScrollPane을 추가하고 레이블을 추가했지만 스크롤 막대가 표시되지 않습니다.
아이디어가 있으십니까? TIA
상자 레이아웃을 사용하여 임의의 레이블 목록이있는 패널에 JScrollPane을 사용하고 싶습니다. 표시 할 항목 (레이블)이 너무 많으면 스크롤바가 표시되도록하려고합니다.JScrollPane BoxLayout로 레이블 집합을 포함하는 패널
패널에 JScrollPane을 추가하고 레이블을 추가했지만 스크롤 막대가 표시되지 않습니다.
아이디어가 있으십니까? TIA
는 이런 종류의 일을 위해, 당신은 일반적으로 사용하는 거라고 JList
또는 JTable
(사용자 정의 렌더링을 필요로하는 경우).
당신이 패널의 적절한 사이즈를 다시 계산하는 강제로 항목을 추가 한 후 JScrollPane
에 validate()
또는 revalidate()
전화 있는지 확인합니다.
그게 나를 위해 작동하지 않았다. 아래를 참조하십시오. – sproketboy
다음은 내가 한 일입니다. 에서
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
는 컨텐츠 패널의 추천 사이즈를 설정하는 기억나요?
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);
이 예제에서는 스크롤 막대가 올바르게 작동하지만 "필수"로 표시된 줄을 제거하면 더 이상 작동하지 않습니다.
예 가능합니다. 나는 이것을 고려하고있다. 필자의 경우 키보드 지향적 인 게임이기 때문에 레이블 세트를 통해 List로 구현하는 것이 더 많은 코드입니다. 그러나 당신 말이 맞습니다. 나는 이렇게 할 수있다. – sproketboy