我有一个扩展名为Canvas的JComponent的类。即使它比我的JScrollPane的JViewport大,旋钮也不会出现在滚动条上,我也无法在Canvas上向下滚动。滚动窗格的代码位于:
final JFrame frame = new JFrame("SketchPad");
frame.setLayout(new BorderLayout());
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
JScrollPane scrollPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
JViewport vp = scrollPane.getViewport();
vp.setLayout(null);
vp.setBackground(Color.BLUE);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
canvas = new Canvas();
canvas.setBounds(0, 0, w, h);
vp.add(canvas);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
我是否在使用JScrollPane做错了什么,还是其他什么?
答案 0 :(得分:4)
vp.setLayout(null);
不要在视口上设置空布局。当添加到滚动窗格视口的组件的首选大小大于滚动窗格的大小时,滚动条将自动出现。
布局管理器用于确定首选大小(作为一般规则,您绝不应使用空布局)。
另外,不要使用Canvas,即AWT组件。使用Swing时使用JPanel
。或者,如果它是一个自定义类,那么它应该有一个更具描述性的名称,以避免混淆。