有一个Panel里面是动态计算出的图片,其大小是会发生变化的。
在屏幕分辨率为800X600下,由于这个Panel太大,导致图片不能完全显示,需要增加一个滚动条,才可以看到。
静态读入的图片可以增加滚动条,但是如何给"大小动态变化的图片"设置滚动条?
在屏幕分辨率为800X600下,由于这个Panel太大,导致图片不能完全显示,需要增加一个滚动条,才可以看到。
静态读入的图片可以增加滚动条,但是如何给"大小动态变化的图片"设置滚动条?
Ark032425: 我的图片是画在Panel上面的,这个不能改,所以只能将Panel放在JScrollPane中。
另外,也可以根据图片的大小,动态的设置Panel的绝对大小。
可以把许多策略应用到反转的滚动模型中,以便进一步增强性能。例如,缓存下一次和前一次的信息块、把图形从屏外缓存拷贝到视图的屏上代表中。
根据图片的大小,动态的设置Panel的绝对大小,具体怎末实现?
susuifeng: 跟你说的情况不是完全一样,因为整个图片是画在Panel上面的,每一次点击“draw”按钮,都会画出新的图片,但是给这个panel加滚动条不起作用。
例如:
你的图片是2000*2000的大小,那么给你的imPane 调用setPreferredSize(new Dimension(2000,2000));
至于你的scrollpane到底多少这是你设置的,假设是800*600.实际的clipRect可能是798*598。那么这个范围是你的可见范围。实际swing是通过内部的preferredSize和clipBounds的比例和位置来调整滚动条的。下班了。如有疑问,节后再见。你一试便知。建议读一下jpanel和jscrollpane的源码。多数的书上都没有谈及这个问题。
当拖动滚动条的时候,panel上面的图像会花掉。
第一,大小是在更换图片的时候动态更改的。不是一开始设定了以后就不变的。你的panel不需要固定大小。
第二,图像会花掉,我没有发现你的问题。请确认你的控制方式。你最好那代码出来看。莪米个人的代码都是不一样的。只是这样说,没有办法判断你的问题。
2、 mainPanel 是画图像的面板
mainPanel.setPreferredSize(new Dimension(730, 730));
JScrollPane scrollPanel = new JScrollPane(mainPanel);
3、当移动滚动条的时候,图像会被拉升,可能是需要刷新,需不需要事件支持?
的,具体方法:
int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
jsp = new JScrollPane(painter, v, h);
painter变量中,主要要重写下面的方法
paintComponent(Graphics g){
Dimension size = new Dimension(upSqre, upSqre);
setSize(size);
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
}
也就是说,你每次动态获取图片的时候,需要把图片的width,height 得到,然后传给 new Dimension(upSqre, upSqre);
是不是有滚动条,主要看setPreferredSize(size);
这个函数的
希望对你有绝对的帮助,因为我已经实现了
例如:
你的图片是2000*2000的大小,那么给你的imPane 调用setPreferredSize(new Dimension(2000,2000));
至于你的scrollpane到底多少这是你设置的,假设是800*600.实际的clipRect可能是798*598。那么这个范围是你的可见范围。实际swing是通过内部的preferredSize和clipBounds的比例和位置来调整滚动条的。下班了。如有疑问,节后再见。你一试便知。用 JScrollPane建议读一下jpanel和jscrollpane的源码。多数的书上都没有谈及这个问题。
实现的方法跟楼上的liujun3512159差不多,也是事先获得要绘制图形的大小,然后再设置JLabel的大小