我有下一个代码:
public class MyScroll extends JFrame {
public MyScroll() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setLayout(null);
for (int i = 0; i < 10; i++) {
JButton b = new JButton("Hello-" + i);
b.setBounds(0, i * 50, 100, 45);
panel.add(b);
b.setLayout(null);
}
JScrollPane scrollPane = new JScrollPane(panel);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setBounds(50, 30, 100, 325);
JPanel contentPane = new JPanel(null);
contentPane.setPreferredSize(new Dimension(500, 400));
contentPane.setBackground(Color.BLUE);
contentPane.add(scrollPane);
contentPane.setLayout(null);
setContentPane(contentPane);
pack();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
}
而且,它正在呈现这个:
如您所见,垂直和水平滚动不起作用,但两者都已定义并显示在JPanel
中。
有人能解释一下我做错了什么吗?
此代码基于以下代码:滚动JPanel但是,目前无法使用垂直滚动
有人能解释一下我做错了什么吗?
panel.setLayout(null);
不要使用空布局。
只有当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,滚动条才会自动出现。
确定面板的首选大小是布局管理器的工作。由于您不使用布局管理器,因此不会计算首选大小。
所以解决方案是使用布局管理器。也许垂直BoxLayout
。