我有下一个代码:
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
内部。
有人可以告诉我我在做什么错吗?
此代码基于以下代码: Scrolling a JPanel 但是,当前无法使用垂直滚动
答案 0 :(得分:1)
有人可以告诉我我在做什么错吗?
panel.setLayout(null);
请勿使用空布局。
仅当添加到滚动窗格的组件的首选大小大于滚动窗格的大小时,滚动条才会自动显示。
布局管理器的工作是确定面板的首选大小。由于您不使用布局管理器,因此不会计算首选尺寸。
因此解决方案是使用Layout Manager。也许是垂直BoxLayout
。