旋钮不出现在滚动条上

Knobs don't appear on scroll bars

我有一个扩展名为 Canvas 的 JComponent 的 class。即使它比我的 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 做错了什么,还是其他什么?

vp.setLayout(null);

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

我们用来确定首选大小的布局管理器(作为一般规则,您永远不应使用空布局)。

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