swing容器继承重绘问题解决

 
以JPanel为例,继承JPanel,想动态为器更换背景,这就涉及到重绘问题.一下是本人重写代码: 
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容器继承重绘问题解决的更多相关文章

  1. java中的重绘

    void java.awt.Container.validate()Validates this container and all of its subcomponents.这个函数更新容器及其全部 ...

  2. swing重绘按钮为任意形状图案的方法

    swing重绘按钮为任意形状图案的方法 摘自https://www.jb51.net/article/131290.htm 转载  更新时间:2017年12月22日 13:43:00   作者:_Th ...

  3. 继承UIView的初始化 、重绘、以及绘制图片

    大家对于UIViewController的生命周期都相当了解了.但是对于继承UIView的子类能做什么,却很少有文章介绍的. 1.  -initWithFrame:(CGRect)rect是view指 ...

  4. 回流(reflow)与重绘(repaint)

    最近项目排期不紧,于是看了一下之前看了好久也没看明白的chrome调试工具的timeline.但是很遗憾,虽然大概懂了每一项是做什么的,但是用起来并不能得心应手.所以今天的重点不是timeline,而 ...

  5. 《Android内核剖析》读书笔记 第13章 View工作原理【View重绘过程】

    计算视图大小的过程(Measure) 视图大小,准确的来说应该是指视图的布局大小:我们在layout.xml中为每个UI控件设置的layout_width/layout_height两个属性被用来设置 ...

  6. Android学习Scroller(五)——具体解释Scroller调用过程以及View的重绘

    PS: 该篇博客已经deprecated,不再维护.详情请參见  站在源代码的肩膀上全解Scroller工作机制  http://blog.csdn.net/lfdfhl/article/detail ...

  7. winform控件大小改变是防止背景重绘导致的闪烁(转载)

    在工作中需要做一个伸缩控件,这个自定义控件继承于Panel.这个伸缩控件分为两个部分,头部是一个自定义组件,伸缩控件的背景为灰色,头部背景要求白色.伸缩控件在点击按钮时会重绘,同时他内部的控件也会重绘 ...

  8. x01.Weiqi.7: 调整重绘

    GitHub 谁方便谁拍,谁重要拍谁.在这个砖头满天飞的时代,一个好的生态显得尤为重要.  红颜小头发,要的很简单. 也许成绝唱,只因鱼断肠. 姚贝福娃的离去,除感叹人生无常外,活着做点有意义的事情, ...

  9. Android视图状态及重绘流程分析,带你一步步深入了解View(三)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17045157 在前面一篇文章中,我带着大家一起从源码的层面上分析了视图的绘制流程, ...

随机推荐

  1. ms sql server缓存清除与内存释放

    Sql Server系统内 存管理在没有配置内存最大值,很多时候我们会发现运行Sql Server的系统内存往往居高不下.这是由于他对于内存使用的策略是有多少闲置的内存就占用多少,直到内存使用虑达到系 ...

  2. java split函数用法(转)

    1.语法如下 String.split(sourceStr,maxSplit) String.split(sourceStr) 参数说明:sourceStr是被分割的字符串,maxSplit是最大的分 ...

  3. 2015年9月30日html表单笔记

    Asp.net是盖房子,那么html就是里面的砖头. 表单是非常重要的,为什么要使用表单呢?因为表单可以向服务器传输数据. 一般用form表单来传输数据. BS程序的执行模型具体流程是,个人电脑在表单 ...

  4. bzoj 1879 [Sdoi2009]Bill的挑战(状压DP)

    Description  Input 本题包含多组数据. 第一行:一个整数T,表示数据的个数. 对于每组数据: 第一行:两个整数,N和K(含义如题目表述). 接下来N行:每行一个字符串. Output ...

  5. 中国区Windows Azure 提供的功能以及与国外的差异

    当前中国服务提供的功能 目前,中国服务中包括以下 Azure 功能. 计算 - 虚拟机(用于 IaaS 服务) 计算 - 云服务(用于 PaaS 服务) 计算 - 网站 数据服务 - 存储(用于 Bl ...

  6. CodeForces 352C. Jeff and Rounding(贪心)

    C. Jeff and Rounding time limit per test:  1 second memory limit per test: 256 megabytes input: stan ...

  7. PHP留言板(实例)

    lyb.htm <div class="lymain"> <script language="JavaScript"> function ...

  8. Spring源码入门——DefaultBeanNameGenerator解析

    我们知道在spring中每个bean都要有一个id或者name标示每个唯一的bean,在xml中定义一个bean可以指定其id和name值,但那些没有指定的,或者注解的spring的beanname怎 ...

  9. linux 查看cpu 内存 硬盘 文件夹大小

    文件夹大小 显示cpu使用率 top 1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physical id" | uniq | w ...

  10. Oracle—用户管理的完全恢复(一)

    一.分类 可以分为在非归档模式下和归档模式下的完全恢复,完全恢复主要是针对归档模式下的,在非归档模式下很难做到完全恢复,除非是在做恢复时,联机重做日志还没有被重写. 二.非归档的有关性质 1.在非归档 ...