我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Swing如何实现渐显效果

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Swing如何实现渐显效果

这篇文章将为大家详细讲解有关Swing如何实现渐显效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

能不能让Swing控件也有渐隐和渐显的效果呢,答案当然是肯定的。这里也要说明一下Swing这些高级特性的实现机制。Swing里的特效不是靠调用一个方法就可以实现的,而是要我们自己去写这些方法,主要还是重写Swing的public void paint(Graphics g)方法。Swing的一切样式说白了都是利用paint方法“画”上去的,所以说Swing比较慢,当然如果我们考虑Swing主要用来做客户端显示的,稍微慢一点也是可以接受的。

下面说Swing的控件的渐显效果,我想原理还是蛮简单的,不断改变控件的透明度即可。即g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.class="lazy" data-src_OVER, alpha));

下面是完整的控件代码,该控件您可以认为是一个类似JPanel的容器:

package com.zakisoft.frame;   import java.awt.AlphaComposite;  import java.awt.Graphics;  import java.awt.Graphics2D;  import java.awt.event.ActionEvent;  import java.awt.event.ActionListener;  import java.awt.image.BufferedImage;  import java.io.FileInputStream;  import java.io.FileNotFoundException;  import java.io.IOException;   import javax.imageio.ImageIO;  import javax.swing.Timer;     public class ZPanel extends javax.swing.JComponent implements ActionListener {       private static final long serialVersionUID = 1L;      private BufferedImage image;       private static final int ANIMATION_FRAMES = 100;      private static final int ANIMATION_INTERVAL = 10;            private int frameIndex;      // 时钟      private Timer timer;       public BufferedImage getImage() {          return image;      }       public void setImage(BufferedImage image) {          this.image = image;      }       private int imgWidth;      private int imgHeight;       public int getImgWidth() {          return imgWidth;      }       public void setImgWidth(int imgWidth) {          this.imgWidth = imgWidth;      }       public int getImgHeight() {          return imgHeight;      }       public void setImgHeight(int imgHeight) {          this.imgHeight = imgHeight;      }       public ZPanel() {      }       public void setImagePath(String imgPath) {          // 该方法不推荐使用,该方法是懒加载,图像并不加载到内存,当拿图像的宽和高时会返回-1;          // image = Toolkit.getDefaultToolkit().getImage(imgPath);          try {              // 该方法会将图像加载到内存,从而拿到图像的详细信息。              image = ImageIO.read(new FileInputStream(imgPath));          } catch (FileNotFoundException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }          setImgWidth(image.getWidth(this));          setImgHeight(image.getHeight(this));      }       public void paintComponent(Graphics g) {          int x = 0;          int y = 0;          if (null == image) {              return;          }          g.drawImage(image, x, y, image.getWidth(null), image.getHeight(null),                  null);      }       public void paint(Graphics g) {          if (isAnimating()) {              // 根据当前帧显示当前透明度的内容组件              float alpha = (float) frameIndex / (float) ANIMATION_FRAMES;              Graphics2D g2d = (Graphics2D) g;              g2d.setComposite(AlphaComposite.getInstance(                      AlphaComposite.class="lazy" data-src_OVER, alpha));              // Renderer渲染机制              super.paint(g2d);          } else {              // 如果是***次,启动动画时钟              frameIndex = 0;              timer = new Timer(ANIMATION_INTERVAL, this);              timer.start();          }      }       // 判断当前是否正在进行动画      private boolean isAnimating() {          return timer != null && timer.isRunning();      }       // 关闭时钟,重新初始化      private void closeTimer() {          if (isAnimating()) {              timer.stop();              frameIndex = 0;              timer = null;          }      }       // 动画时钟处理事件      public void actionPerformed(ActionEvent e) {          // 前进一帧          frameIndex++;          if (frameIndex >= ANIMATION_FRAMES)              // ***一帧,关闭动画              closeTimer();          else             // 更新当前一帧              repaint();      }  }

我们利用控件的public void paint(Graphics g) 方法,来设置控件的透明度,然后利用super.paint(g2d)方法重绘页面;重绘时系统会自动调用public void actionPerformed(ActionEvent e) 方法,我们在这里来改变控件的透明度,并且判断控件是否加载完毕,加载完毕就停止计时器。

很简单,效果还不错吧,附件是完整的运行代码。按“图片渐显”按钮,可以反复查看效果。

下图是加载时界面:

Swing如何实现渐显效果

下图是加载完成界面:

Swing如何实现渐显效果

关于“Swing如何实现渐显效果”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Swing如何实现渐显效果

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Swing如何实现渐显效果

这篇文章将为大家详细讲解有关Swing如何实现渐显效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。能不能让Swing控件也有渐隐和渐显的效果呢,答案当然是肯定的。这里也要说明一下Swing这些高级特性的
2023-06-17

CSS如何实现渐变效果

这篇文章主要介绍CSS如何实现渐变效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!线性渐变( linear-gradient )background-image: linear-gradient(to 方向, 开始
2023-06-08

如何在Android中实现渐显按钮的左右滑动效果

先看下运行效果: 程序结构: MainActivity文件中代码: 代码如下:package com.android.buttonpageflipper;import android.app.Activity;import andro
2022-06-06

Android如何实现渐变色水波纹效果

这篇文章主要介绍了Android如何实现渐变色水波纹效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。项目中使用到的效果,效果图如下:代码实现:public class Wa
2023-06-21

DW网页元素如何制作渐隐渐现效果

这篇文章主要介绍DW网页元素如何制作渐隐渐现效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Dreamweaver中想要使用jQ效果实现网页元素的渐隐渐现钉钉效果,该怎么制作呢?方法如下1、打开Dreamweave
2023-06-08

jquery实现图片渐变效果

在网页设计中,图片渐变效果的应用越来越常见,它不仅能够给网页增加美观度,同时也能够吸引用户的注意力。今天,我们将通过jQuery实现图片渐变效果。首先,在HTML中,我们需要先插入一张图片:``````接着,在JavaScript中,我们需要将图片的src属性存储到一个变量中:```var
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录