JScrollPane用于包含BoxLayout标签集的面板

时间:2010-02-21 15:54:26

标签: java swing jscrollpane

我想将JScrollPane用于一个面板,它使用框布局在其中包含任意标签列表。我试图得到它,以便在显示太多项目(标签)时会出现滚动条。

我尝试在面板中添加JScrollPane,然后添加标签,但之后我看不到任何滚动条。

有什么想法吗?

TIA

4 个答案:

答案 0 :(得分:1)

对于这类事情,您通常使用JListJTable(如果您需要自定义渲染)。

答案 1 :(得分:1)

确保在添加项目后在validate()上致电revalidate()JScrollPane,以强制重新计算面板的首选尺寸。

答案 2 :(得分: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

答案 3 :(得分: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);

在此示例中,滚动条可以正常工作,但如果删除标记为“必需”的行,它将不再起作用。