旋钮不出现在滚动条上
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 那么它应该有一个更具描述性的名称以避免混淆。
我有一个扩展名为 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 那么它应该有一个更具描述性的名称以避免混淆。