我有一个我创建的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个被隐藏,滚动不起作用。我究竟做错了什么? (如下图所示)
答案 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);
}
});
}
}
滚动条会根据需要显示。