swing容器继承重绘问题解决
swing容器继承重绘问题解决
package ui;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class JJPanel extends JPanel {
private static final long serialVersionUID = 1L;
BufferedImage bufImg;
Graphics2D g2d;
private Image img;
private static String imgPath=" ";
public JJPanel(String imgPath) {
setImgPath(imgPath);
}
public void paintComponent(Graphics g) {
img=new ImageIcon(getImgPath()).getImage();
setOpaque(false);// 设置false以便于设置背景
// 启用图像缓存设置好图像。
bufImg = new BufferedImage(img.getWidth(null),
img.getHeight(null), BufferedImage.TYPE_3BYTE_BGR);
g2d = bufImg.createGraphics();
g2d.drawImage(img, 0, 0, null);
g2d.dispose();// 释放资源
// 准备矩形,用来创建一个纹理填充
Rectangle rectan = new Rectangle(0, 0, img.getWidth(null),
img.getHeight(null));
TexturePaint tu = new TexturePaint(bufImg, rectan);
// 用创建的纹理填充来填充整个面板
g2d = (Graphics2D) g;
g2d.setPaint(tu);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
super.paintComponent(g);
}
public void repaint() {
img=new ImageIcon(getImgPath()).getImage();
super.repaint();
}
/**
* @return the imagePath
*/
public String getImgPath() {
return imgPath;
}
/**
* @param imagePath the imagePath to set
*/
public static void setImgPath(String imgPath) {
JJPanel.imgPath = imgPath;
}
}
简单的重写paintcomponent()方法发现动态修改imgPath,无法重绘组件,原因就在还要重写repaint()方法,并及时把修改好的imgPath传到repaint()中,这样方可动态重绘.
swing容器继承重绘问题解决的更多相关文章
- java中的重绘
void java.awt.Container.validate()Validates this container and all of its subcomponents.这个函数更新容器及其全部 ...
- swing重绘按钮为任意形状图案的方法
swing重绘按钮为任意形状图案的方法 摘自https://www.jb51.net/article/131290.htm 转载 更新时间:2017年12月22日 13:43:00 作者:_Th ...
- 继承UIView的初始化 、重绘、以及绘制图片
大家对于UIViewController的生命周期都相当了解了.但是对于继承UIView的子类能做什么,却很少有文章介绍的. 1. -initWithFrame:(CGRect)rect是view指 ...
- 回流(reflow)与重绘(repaint)
最近项目排期不紧,于是看了一下之前看了好久也没看明白的chrome调试工具的timeline.但是很遗憾,虽然大概懂了每一项是做什么的,但是用起来并不能得心应手.所以今天的重点不是timeline,而 ...
- 《Android内核剖析》读书笔记 第13章 View工作原理【View重绘过程】
计算视图大小的过程(Measure) 视图大小,准确的来说应该是指视图的布局大小:我们在layout.xml中为每个UI控件设置的layout_width/layout_height两个属性被用来设置 ...
- Android学习Scroller(五)——具体解释Scroller调用过程以及View的重绘
PS: 该篇博客已经deprecated,不再维护.详情请參见 站在源代码的肩膀上全解Scroller工作机制 http://blog.csdn.net/lfdfhl/article/detail ...
- winform控件大小改变是防止背景重绘导致的闪烁(转载)
在工作中需要做一个伸缩控件,这个自定义控件继承于Panel.这个伸缩控件分为两个部分,头部是一个自定义组件,伸缩控件的背景为灰色,头部背景要求白色.伸缩控件在点击按钮时会重绘,同时他内部的控件也会重绘 ...
- x01.Weiqi.7: 调整重绘
GitHub 谁方便谁拍,谁重要拍谁.在这个砖头满天飞的时代,一个好的生态显得尤为重要. 红颜小头发,要的很简单. 也许成绝唱,只因鱼断肠. 姚贝福娃的离去,除感叹人生无常外,活着做点有意义的事情, ...
- Android视图状态及重绘流程分析,带你一步步深入了解View(三)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17045157 在前面一篇文章中,我带着大家一起从源码的层面上分析了视图的绘制流程, ...
随机推荐
- 快速定位隐蔽的sql性能问题及调优【转载】
在前几天,有个开发同事问我一个问题,其实也算是技术救援,他说在有个job数据处理的频率比较高,在测试环境中很难定位出在哪有问题,而且速度也还能接 受,但是在生产环境中总是会慢一些,希望我能在测试环境中 ...
- Ubuntu 14.04 SSH + 远程登录xrdp
1. 安装ssh 打开"终端窗口",输入"sudo apt-get install openssh-server"-->回车-->输入"y ...
- Linux入门2
请设置系统时间和硬件时间保持一致:# hwclock --hctosys sed用法: 1.删除/etc/grub.conf文件中行首的空白符:sed -r 's@^[[:space:]]+@@g' ...
- HW4.6
public class Solution { public static void main(String[] args) { final double MILES_PER_KILOGRAM = 1 ...
- Java NIO缓冲
缓冲区(buffer)是从即将写入通道(channel)或刚刚从通道中读出的一段数据.它是一个持有数据,并扮演NIO通道端点的对象.缓冲区为数据访问和读写过程提供正式机制. 它是NIO和老版Java ...
- 使用Jquery.load()方法,出现-此页的状态信息无效,可能已损坏。[转]
今天遇到此页的状态信息无效,可能已损坏,在以下页面找到解决办法,特记录下来: 转自:http://www.cnblogs.com/liuwenlong/archive/2011/05/09/20410 ...
- T-SQL语句查看作业等信息
因服务器需要迁移,需要将现有JOB迁移至新服务器,待服务器调整完毕,则重新迁移到原服务器,所以在做迁移之前希望将现有JOB进行备份,不至于乱了执行时间.1.查看所有作业列表USE master SEL ...
- SQLite 入门教程(二)创建、修改、删除表 (转)
转于 SQLite 入门教程(二)创建.修改.删除表 一.数据库定义语言 DDL 在关系型数据库中,数据库中的表 Table.视图 View.索引 Index.关系 Relationship 和触发器 ...
- 触摸与手势学习-swift
触摸是一个UITouch对象,该对象放在一个UIEvent中,每个UIEvent包含一个或多个UITouch对象,每个UITouch对象对应一个手指.系统将UIEvent发送到应用程序上,最后应用程序 ...
- I18N 国际编码
<%@ page language="java" import="java.util.*, cn.hncu.domain.*" pageEncoding= ...