Java Swing:JScrollPane 不适用于 JPanel 中的缓冲图像

问题描述

这是我的 JFrame 类,它应该显示一个高度和宽度为 2000 像素的图像。显示的区域应该只有 widthheight800px,我希望能够使用滚动条到达 2000 像素的其余部分。但是目前只有 800x800 像素的 Frame 并且我无法滚动图片。我可以看到滚动条,但无法滚动它。如果我将窗口拖大,我只能看到更多的图片。

我的代码现在正在做什么:创建 panel 类的实例 Panel,它显示一个高度:2000 像素和宽度:2000 像素的图像。然后我创建一个 JScrollPane 并传递 panel 实例。

如果我不使用 setHorizontalScrollBarPolicy 行,setVerticalScrollBarPolicy我什至看不到滚动条。如果我使用这两行,我会看到一个用于水平和垂直滚动的滚动条,但我无法使用它们,因为图片似乎已最大化。

这是我的框架类:

public class Frame extends JFrame {


    public Frame() {

        Panel panel = new Panel();
       
        JScrollPane scrollPane = new JScrollPane(panel);

        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);


        add(scrollPane);
       
        this.getContentPane().setPreferredSize(new Dimension(800,800));
        panel.generateImage();
        setVisible(true);

        pack();
    }

这是生成图像的类

public class Panel extends JPanel {

   
    private BufferedImage img;

    public Panel() {
     
        img= new BufferedImage(2000,2000,BufferedImage.TYPE_INT_RGB);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawImage(img,null);
    }

public void generateImage () {

       //...image gets generated here
        repaint();
    }
}

这是一个例子,它现在的样子。狗只是一个例子,但它希望能让我的问题更清楚-> 我想滚动浏览图像,以便我可以看到狗的其他部分。

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)