zoukankan      html  css  js  c++  java
  • 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()中,这样方可动态重绘.
     
     


    关注我的新浪微博

  • 相关阅读:
    【python】+json+解析数组json字符串(且键没有引号)(完美解决)
    【Python】+类内部方法相互调用
    【Python】+字符串转换为日期(互转)+获取当前时间+获取当前时间戳
    【python】+tushare库+判断指定日期是否是交易日
    【python】+占位符
    【python】【pycharm】+代码自动提示
    【python】+命名规范
    【python】+'chromedriver' executable needs to be in PATH
    【python】+8大数据类型
    【python】+字典操作(全)
  • 原文地址:https://www.cnblogs.com/xby1993/p/3157716.html
Copyright © 2011-2022 走看看