java - JScrollPane 不显示滚动条

标签 java swing jpanel jscrollpane layout-manager

我有一个带有自定义 LayoutManager 的 JPanel 并尝试将其放入 JScrollPane 中,但是,滚动 Pane 似乎不知道它应该启用滚动。无论我如何设置组件的首选大小(这就是 JScrollPane 的 javadoc 所说的它所需要的),它绝对没有区别。这是代码:

    canvas = new JPanel();
    JScrollPane scroll = new JScrollPane();
    scroll.setViewportView(canvas);
    scroll.setPreferredSize(new Dimension(924,700));
    canvas.setPreferredSize(new Dimension(2000,2000));

滚动条不出现。 JScrollPane 的容器设置为遵循其首选大小。我已经通过调试器检查了 Canvas 的首选大小确实始终为 2000 x 2000(LayoutManager 确保这一点),那么这里可能发生了什么?

最佳答案

这并不是一个真正的答案,而是一个演示 sscce这再次表明,您的代码对我来说工作得很好:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.RenderingHints;

import javax.swing.*;

public class ScrollBarEg {
   protected static final Paint GRADIENT_PAINT = new GradientPaint(0, 0,
         Color.blue, 50, 50, Color.red, true);

   private static void createAndShowGui() {
      JPanel mainPanel = new JPanel();

      JPanel canvas = new JPanel() {
         @Override
         protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g.create();
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                  RenderingHints.VALUE_ANTIALIAS_ON);
            g2.setPaint(GRADIENT_PAINT);
            g2.fillOval(0, 0, getWidth(), getHeight());
            g2.dispose();
         }
      };
      JScrollPane scroll = new JScrollPane();
      scroll.setViewportView(canvas);
      scroll.setPreferredSize(new Dimension(924, 700));
      canvas.setPreferredSize(new Dimension(2000, 2000));

      mainPanel.add(scroll);

      JFrame frame = new JFrame("ScrollBar Eg");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}

这向我表明您的错误存在于您未发布的代码中的其他位置。

关于java - JScrollPane 不显示滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9421687/

相关文章:

java - paintComponent 和 super.paintComponent

java - Maven 构建错误 : Can not set org. apache.maven.shared.filtering.MavenResourcesFiltering 字段

java - 记录 NullPointerException?

java - 是什么导致 Java JLabel 图标的图像质量差?

java - 从 JPanel 中删除 JPanel - 仅适用于其自己的类

java - JPanel 无法从 JFrame 打开

java - 如何访问由构造函数创建的对象变量

java - 测试验证约束

java - 在 netbeans 中构建后,Jar 文件无法正常运行

java - setOpaque为true,但JPanel不会改变背景颜色