JPanel不在JScrollPane中滚动

时间:2014-10-11 21:25:58

标签: java swing jpanel jscrollpane miglayout

我有一个我创建的JPanel

    JPanel statsKeysPanel = new JPanel(new MigLayout("insets 0", "[]", ""));

并使用堆叠在一起的动态数量的JLabel填充。为了举个例子:

    for(int i = 0; i < 30; i++) {
        statsKeysPanel.add(new JLabel("" + i + " key value"), "wrap");
    }

然后我创建并添加滚动条,如此

    JPanel panel = new JPanel(new MigLayout("insets 0", "[center][][center][]", "[][]"));
    final JScrollPane keysScroller = new JScrollPane(this.statsKeysPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
        ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    keysScroller.setMaximumSize(new Dimension(100, 300));
    panel.add(keysScroller, "cell 0 1");

最大值为300,但30个不适合300px的JLabel中的15个被隐藏,滚动不起作用。我究竟做错了什么? (如下图所示)

enter image description here

2 个答案:

答案 0 :(得分:2)

final JScrollPane keysScroller = new JScrollPane(this.statsKeysPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
        ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

为什么在水平和垂直滚动条上都使用NEVER?我认为这会阻止滚动条出现。

我通常不设置任何属性,只是让滚动窗格确定何时显示滚动条。有时我会使用ALWAYS为滚动条保留空间。

答案 1 :(得分:0)

您正在使用不必要的两个面板;一个人就够了。我觉得 您已省略导致错误的代码。

这是一个有效的例子:

package com.zetcode;

import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import net.miginfocom.swing.MigLayout;

public class StatsKeyEx extends JFrame {

    public StatsKeyEx() {

        initUI();
    }

    private void initUI() {

        JPanel pnl = new JPanel(new MigLayout());

        for (int i = 0; i < 60; i++) {
            pnl.add(new JLabel("" + i + " key value"), "wrap");
        }

        JScrollPane spane = new JScrollPane(pnl);
        spane.setPreferredSize(new Dimension(150, 200));
        add(spane);

        pack();

        setTitle("Scrolling");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                StatsKeyEx ex = new StatsKeyEx();
                ex.setVisible(true);
            }
        });
    }
}

滚动条会根据需要显示。

enter image description here