旋钮不会出现在滚动条上

时间:2015-02-15 02:07:04

标签: java swing jscrollpane

我有一个扩展名为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做错了什么,还是其他什么?

1 个答案:

答案 0 :(得分:4)

vp.setLayout(null);

不要在视口上设置空布局。当添加到滚动窗格视口的组件的首选大小大于滚动窗格的大小时,滚动条将自动出现。

布局管理器用于确定首选大小(作为一般规则,您绝不应使用空布局)。

另外,不要使用Canvas,即AWT组件。使用Swing时使用JPanel。或者,如果它是一个自定义类,那么它应该有一个更具描述性的名称,以避免混淆。