Java文字特效(二)|会变色文字、水印文字特效、动态绘制文本

这里要实现的特效中有其中两个是动态的,所以要使用Java的多线程技术,通过实现Runnable接口中的run()方法实现的,在实现动态显示时,要使用多线程技术,基本的实现是这样的

Thread t = new Thread(panel7);  //实现Runnable接口的类创建的对象
t.start();
this.add(panel7);

本文提及的文字特效具体实现效果如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来一个一个实例进行分析
(一)会变色的文字
通过重写JComponent类的paint()方法,并实现Runnable接口中的run()方法实现的,其中paint()方法中添加的代码用于绘制文本,run()方法中的代码用于随机获得颜色的RGB值,并创建Color对象。

public class ChangeColorTextPanel extends JPanel implements Runnable {
	Color color =new Color(0,0,255);
	public void paint(Graphics g) {
		Graphics2D g2 = (Graphics2D)g;
		String value = "会变色的文字";
		int x = 2;
		int y = 90;
		Font font = new Font("楷体",Font.BOLD,40);
		g2.setFont(font);
		g2.setColor(color);
		g2.drawString(value, x, y);
	}

	@Override
	public void run() {
		Random random = new Random();
		while(true) {
			int R = random.nextInt(256);
			int G = random.nextInt(256);
			int B = random.nextInt(256);
			color = new Color(R,G,B);
			repaint();
			try {
				Thread.sleep(300);
			}catch(InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

(二)水印文字特效
通过Graphics2D类的setComposite()方法,为绘图上下文指定表示透明度的AlphaComposite对象实现的。
(1)使用AlphaComposite类获得表示透明度的AlphaComposite对象,该对象使用AlphaComposite类的字段SrcOver调用derive()方法获得

public AlphaComposite derive(float alpha);
//alpha是闭区间0.0f~1.0f之间的一个浮点数字,为0.0f时完全透明,为1.0f时不透明
//返回值:表示透明度的AlphaComposite对象

(2)使用Graphics2D类的setComposite()方法,为绘图上下文指定表示透明度的AlphaComposite对象

public abstract void setComposite(Composite comp);
//comp是表示透明度的AlphaComposite对象
public class WatermarkTextPanel extends JPanel {
	public void paint(Graphics g) {
		Graphics2D g2 = (Graphics2D)g;
		ImageIcon img = new ImageIcon("0.jpg");
		g2.drawImage(img.getImage(), 0, 0, 800, 337, this);
		g2.rotate(Math.toRadians(-30));
		Font font = new Font("楷体",Font.BOLD,60);
		g2.setFont(font);
		g2.setColor(Color.WHITE);
		AlphaComposite alpha = AlphaComposite.SrcOver.derive(0.3f);
		g2.setComposite(alpha);
		g2.drawString("Java编程", 100, 300);
	}

}

(三)动态绘制文本
使用线程和BufferedReader缓冲流从指定文件中读取一个字符,然后绘制该字符,改变下一个字符绘制点的x、y坐标值,最终完成动态绘制文本的功能。
(1)使用System类的getProperty()方法,并为其传递实参字符串user.dir,这样就可以获得项目的当前路径

public static String getProperty(String key);
//系统属性的名称,返回值是返回系统属性的字符串值,如果没有指定键的属性,则返回null

(2)使用BufferedReader类的read()方法,从文本中读取一个字符

public int read() throws IOException;
//返回值是作为一个范围从0~65535整数读入的字符,如果已到达流末尾,则返回-1;IOException是如果发生I/O错误,则抛出IOException异常
public class DynamicDrawTextPanel extends JPanel implements Runnable {
	private BufferedReader read;
	int x = 20;
	int y = 30;
	String value = "";
	public DynamicDrawTextPanel() {
		String projectPath = System.getProperty("user.dir");
		String filePath = projectPath + "/src/dyn.txt";
		InputStream in = null;
		try {
			in = new FileInputStream(filePath);
		}catch(FileNotFoundException e) {
			e.printStackTrace();
		}
		read = new BufferedReader(new InputStreamReader(in));
	}
	
	public void paint(Graphics g) {
		Font font = new Font("华文楷体",Font.BOLD,20);
		g.setFont(font);
		g.setColor(Color.RED);
		g.drawString(value, x, y);
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		int len = 0;
		try {
			while((len = read.read())!=-1) {
				Thread.sleep(400);
				value = String.valueOf((char)len);
				if(value.equals("\n")||value.equals("\r")) {
					x = 20;
					y += 15;
				}
				else {
					x += 20;
				}
				repaint();
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
}
实现菜单鼠标悬浮在上面就变色的特效,可以使用 JavaScript 和 CSS。下面是实现菜单鼠标悬浮变色特效的基本步骤: 1. 在 HTML 中创建一个菜单列表,并为每个菜单项设置一个唯一的 ID。 2. 使用 CSS 定义菜单项的样式,包括默认颜色和悬浮颜色。 3. 使用 JavaScript 监听菜单项的 `mouseover` 和 `mouseout` 事件,当鼠标移动到菜单项上时,将菜单项的颜色设置为悬浮颜色,当鼠标移开菜单项时,将菜单项的颜色设置为默认颜色。 以下是一个实现菜单鼠标悬浮变色特效的示例代码: HTML 代码: ```html <ul> <li id="menu-item-1"><a href="#">菜单项1</a></li> <li id="menu-item-2"><a href="#">菜单项2</a></li> <li id="menu-item-3"><a href="#">菜单项3</a></li> </ul> ``` CSS 代码: ```css ul li { display: inline-block; margin-right: 20px; padding: 10px; background-color: #ccc; color: #fff; } ul li:hover { background-color: #666; } ``` JavaScript 代码: ```javascript var menuItems = document.querySelectorAll('ul li'); for (var i = 0; i < menuItems.length; i++) { var menuItem = menuItems[i]; menuItem.addEventListener('mouseover', function() { this.style.backgroundColor = '#666'; }); menuItem.addEventListener('mouseout', function() { this.style.backgroundColor = '#ccc'; }); } ``` 上述代码中,我们使用 `querySelectorAll()` 方法获取所有菜单项,并使用循环为每个菜单项添加 `mouseover` 和 `mouseout` 事件监听器。当鼠标移动到菜单项上时,我们将菜单项的背景颜色设置为悬浮颜色,当鼠标移开菜单项时,我们将菜单项的背景颜色设置为默认颜色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值