JavaSwing:JScrollPane和固定画布/JPanel

JavaSwing:JScrollPane和固定画布/JPanel,java,swing,Java,Swing,我试图使用JScrollPane的滚动条来模拟画布中的滚动(JPanel)。面板具有固定大小,将使用paintComponent在其内部绘制图像。 我需要能够放大(并滚动),但我只希望图像能够放大,同时保持JPanel的固定大小不变。我尽量避免在面板内制作自己的滚动条(通过绘制滚动条、监听鼠标事件等) 是否可以使用JScrollPane来管理偏移量,并在绘制图像时更改图像的大小/放大图像,而不触及JPanel的边界 这样做的最初原因是我想将像素数据作为一个数组来处理,如果需要调整面板的大小,这将

我试图使用JScrollPane的滚动条来模拟画布中的滚动(JPanel)。面板具有固定大小,将使用
paintComponent
在其内部绘制图像。 我需要能够放大(并滚动),但我只希望图像能够放大,同时保持JPanel的固定大小不变。我尽量避免在面板内制作自己的滚动条(通过绘制滚动条、监听鼠标事件等)

是否可以使用JScrollPane来管理偏移量,并在绘制图像时更改图像的大小/放大图像,而不触及JPanel的边界

这样做的最初原因是我想将像素数据作为一个数组来处理,如果需要调整面板的大小,这将无法正常工作


提前感谢-

在本例中,我要做的是创建另一个扩展ImageIcon的类,然后重写paint方法。在这种方法中,我会让它将图像缩放到它设置的任何比例

注意:镜像功能只是水平翻转图像

例如:

public class Icon extends ImageIcon{

private int scale = 1;
private boolean mirror = false;

    public Icon(URL url) throws IOException{
        super(ImageIO.read(url));
    }

    public void setScale(int scale){
        this.scale = scale;
    }

    @Override
    public synchronized void paintIcon(Component c, Graphics g, int x, int y) {
        Graphics2D g2 = (Graphics2D)g.create();
        int height = 0, width = this.getIconWidth(), x1 = 1;
        if(mirror || scale != 1){
            height = -this.getIconHeight();
        }
        if(mirror){
            x1 = -1;
        }else{
            width = 0;
        }
        g2.translate(width * scale, height);
        g2.scale(x1 * scale, 1 * scale);
        super.paintIcon(c, g2, x, y);
    }

    public boolean isMirror() {
        return mirror;
    }

    public void setMirror(boolean mirror) {
        this.mirror = mirror;
    }
}

发布一个简短的示例,说明您正在尝试做什么,我们可以自己运行。我不会首先使用
JScrollBar
s进行缩放,您还应该看一看,这里的secert是确保
JPanel
preferredSize
与所讨论图像的缩放大小匹配,通过这种方式,
JScrollPane
可以调整滚动条以匹配