JScrollPane与JPanel 滚动条 解决canvas的滚动条问题
当用JScrollPane和JPanel显示图片时,需要将JPanel的PrefferedSize及时传递给JScrollPane,否则容易出现JScrollPane的滚动条无法与图片大小匹配的问题,下面是从Matrix网上搜到的一段代码供参考使用:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane; public class ScrollPaneDemo extends JFrame implements MouseListener {
ImagePanel jp;
JScrollPane jsp;
public ScrollPaneDemo() {
super("JScrollPane Demo");
jp = new ImagePanel();
jp.setPreferredSize(new Dimension(600, 400));
jsp = new JScrollPane(jp);
jp.addMouseListener(this);
getContentPane().add(jsp);
setSize(640, 480);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public void mouseClicked(MouseEvent e) {
System.out.println("mouseClicked");
jp.enlarge();
jp.setPreferredSize(jp.getPreferredSize());
jsp.validate();
}
public void mousePressed(MouseEvent e) {
// System.out.println("mousePressed");
} public void mouseReleased(MouseEvent e) {
// System.out.println("mouseReleased");
}
public void mouseEntered(MouseEvent e) {
// System.out.println("mouseEntered");
}
public void mouseExited(MouseEvent e) {
// System.out.println("mouseExited");
}
public static void main(String[] args) {
new ScrollPaneDemo();
}
}
class ImagePanel extends JPanel {
private Image image;
private Dimension theSize = new Dimension(600, 400);
public void setImage(Image image) {
this.image = image;
this.repaint();
}
public Image getImage() {
return this.image;
}
public void paintComponent(Graphics g) {
ImageIcon img = new ImageIcon("Winter.jpg");
g.drawImage(img.getImage(), 0, 0, theSize.width, theSize.height, null);
}
public void enlarge() {
theSize.width = (theSize.width * 101) / 100;
theSize.height = (theSize.height * 101) / 100;
setSize(theSize);
}
public Dimension getPreferredSize() {
return this.theSize;
}
}
因为scrollPane是根据里面的子控件的preferredSize来确定滚动条的。
所以图片变化而滚动条无响应的问题在于让image尺寸变化时,scrollPane能得到新的数据。
解决方式有两种,一种是改变大小时重新设置JPanel的preferred size;
一种是重载getPreferredSize()方法,按照需要返回,楼主的情况可以返回当前
图片的大小的Dimension。
文章出自:http://xu.wy.blog.163.com/blog/static/11568296200786103315608/
JScrollPane与JPanel 滚动条 解决canvas的滚动条问题的更多相关文章
- UITableView 一直显示滚动条(ScrollBar Indicators)、滚动条Width(宽度)、滚动条Color(颜色)
在 IOS 中,对 UIScrollView 的滚动条(ScrollBar Indicators)的自定义设置接口,一直都是很少的.除了能自定义简单的样式(UIScrollViewIndicatorS ...
- 关于Chrome(谷歌浏览器)对docume,准确获取网页客户区的宽高、滚动条宽高、滚动条Left和Top
对于document.compatMode,很多朋友可能都根我一样很少接触,知道他的存在却不清楚他的用途.今天在ext中看到 document.compatMode的使用,感觉这个对于我们开发兼容性的 ...
- 界面控件 - 滚动条ScrollBar(对滚动条消息和鼠标消息结合讲的不错)
界面是人机交互的门户,对产品至关重要.在界面开发中只有想不到没有做不到的,有好的想法,当然要尝试着做出来.对滚动条的扩展,现在有很多类是的例子. VS2015的代码编辑是非常强大的,其中有一个功能可以 ...
- 解决 canvas 绘图在高清屏中的模糊问题
解决 canvas 绘图在高清屏中的模糊问题 为什么模糊 CSS 像素是一个抽象单位(1 px),浏览器根据某种规则将 css 像素转化为屏幕需要的实际像素值. 在高清屏之前,屏幕上显示一个像素点需要 ...
- Javascript和jquery事件--滚动条事件和自定义滚动条事件样式
很想把滚动条事件跟鼠标滚轮事件放在一起,那就直接写在这一篇了.除了事件以外,对滚动条样式的调整也记在这里吧. 滚动条是浏览器的默认事件,使用overflow:auto/scroll都有可能出现,它的默 ...
- 【转】解决 canvas 在高清屏中绘制模糊的问题
来源: http://www.css88.com/archives/9297 使用 canvas 绘制图片或者是文字在 Retina 屏中会非常模糊.如图: 因为 canvas 不是矢量图,而是像图片 ...
- css 溢出滚动条显示,修改滚动条样式
文本或者内容溢出滚动条显示: a/横纵都出滚动条:css添加属性{overflow:auto;} b/横向滚动条:css添加属性{overflow-x:auto;} c/纵向滚动条:css添加属性{o ...
- Vue.js 桌面端自定义滚动条组件|vue美化滚动条VScroll
基于vue.js开发的小巧PC端自定义滚动条组件VScroll. 前段时间有给大家分享一个vue桌面端弹框组件,今天再分享最近开发的一个vue pc端自定义滚动条组件. vscroll 一款基于vue ...
- vue3系列:vue3.0自定义虚拟滚动条V3Scroll|vue3模拟滚动条组件
基于Vue3.0构建PC桌面端自定义美化滚动条组件V3Scroll. 前段时间有分享一个Vue3 PC网页端弹窗组件,今天带来最新开发的Vue3.0版虚拟滚动条组件. V3Scroll 使用vue3. ...
随机推荐
- yum最常用的命令
yum是一个用于管理rpm包的后台程序,用python写成,可以非常方便的解决rpm的依赖关系.在建立好yum服务器后,yum客户端可以通过 http.ftp方式获得软件包,并使用方便的命令直接管理. ...
- SequoiaDB 与 Hive 集成
SequoiaDB与Hadoop部署 SequoiaDB与Hadoop在物理上部署方案如下图所示,部署建议如下: l SequoiaDB与Hadoop部署在相同的物理设备上,以减少Hadoop与Se ...
- Ajax和JavaScript的区别
javascript是一种在浏览器端执行的脚本语言,Ajax是一种创建交互式网页应用的开发技术 ,它是利用了一系列相关的技术其中就包括javascript.Javascript是由网景公司开发的一种脚 ...
- [转]PHP中fopen,file_get_contents,curl的区别
1. fopen /file_get_contents 每次请求都会重新做DNS查询,并不对 DNS信息进行缓存.但是CURL会自动对DNS信息进行缓存.对同一域名下的网页或者图片的请求只 ...
- ASP.NET MVC4学习笔记之总体概述
断断续续使用ASP.NET MVC框架也有一年多了,也算积累了一些经验,唉,一直想写一些笔记好好总结一下,人太懒不想动笔,今天终于决定开始.希望自己能坚持下去. 这篇文章大体介绍ASP.NET MVC ...
- [转]MAC下JDK版本的切换
系统里之前先安装里jdk6的,后台又装里7,安装完成后,java -version 版本是7, 导致我eclipse打不开,一开始的做法是,把7的版本给删除掉. 删除的方法也很简单,在命令行中到 / ...
- Leeo 智能夜灯:默默守护你的家
http://www.ifanr.com/462377 Leeo 智能夜灯是一个低调的设备.它不需要你与之交互,也不会产生多余的费用.当你把它插到墙上插座,然后下载应用后,就不用再管它了.然后,它就开 ...
- DataGridView 使用CheckBox选中行
在winform中使用checbox很多.上次那个项目里就用到了,写了一个不太好用,后来翻阅了一下微软提供的样码,我觉得有必要给大家分享一下. // This event handler manual ...
- JDBC连接数据库代码
//连接是需要导包 http://pan.baidu.com/s/1o6nyuOa /*配合数据库建立表 create database day14 character set utf8 collat ...
- centos 64位linux系统下安装appt命令
首先,安装apktool包 1. wget http://android-apktool.googlecode.com/files/apktool-install-linux-r04-brut1.ta ...