JavaSwing:JScrollPane和固定画布/JPanel
我试图使用JScrollPane的滚动条来模拟画布中的滚动(JPanel)。面板具有固定大小,将使用JavaSwing:JScrollPane和固定画布/JPanel,java,swing,Java,Swing,我试图使用JScrollPane的滚动条来模拟画布中的滚动(JPanel)。面板具有固定大小,将使用paintComponent在其内部绘制图像。 我需要能够放大(并滚动),但我只希望图像能够放大,同时保持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
可以调整滚动条以匹配