• swing容器继承重绘问题解决


     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()中,这样方可动态重绘.
     
     


    关注我的新浪微博

  • 相关阅读:
    机器人平台框架Yarp
    Git常用使用技巧
    Qt 5.x 开发技巧
    ROS (Robot Operating System) 相关资料与文档
    图形图像技术在手游中的潜在应用
    【Jmeter】Jmeter参数化的几种方式
    【Jmeter】调试取样器(Debug Sampler)进行调试
    【jmeter】实现接口关联的两种方式:正则表达式提取器和json提取器
    【Jmeter】Jmeter安装配置教程
    【Jmeter】第一个接口测试案例
  • 原文地址:https://www.cnblogs.com/xby1993/p/3157716.html
Copyright © 2020-2023  润新知