观心静

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  422 随笔 :: 0 文章 :: 86 评论 :: 139万 阅读
package rom;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.plaf.SliderUI;

/*
 * 写一个会自动变色的按键
 */
public class Demo4 extends JFrame implements ActionListener,Runnable{
	JPanel jPanel;
	JButton jButton;
	Thread thread;
	static boolean off_on;
	int h;
	int s;
	int b;
	Color color1 = Color.YELLOW; //黄色
	//                                黑色                               灰色                           灰色                                蓝色                           青色          
	Color colors_data [][] = {{color1,Color.BLACK,Color.GRAY,Color.gray,Color.BLUE,Color.CYAN		
			,Color.DARK_GRAY//深灰色  
			,Color.GREEN //绿色
			,Color.LIGHT_GRAY //浅灰
			,Color.MAGENTA  //品红
			,Color.ORANGE //橙色
			,Color.PINK  //粉色
			,Color.RED //红色
			,Color.WHITE} //白色		
			,{Color.getHSBColor(h,s,b)}};  //使用HSB拾色器模式拾取色彩,可以直接百度HSB了解
			
	public Demo4(String name) {
		// TODO Auto-generated constructor stub
		super(name);
		thread = new Thread(this); //创建一个线程
		jPanel = new JPanel(); //添加区域面板
		jButton = new JButton("手动换颜色"); //添加按键
		jPanel.setSize(180, 180); //设置区域面板快大小
		jPanel.add(jButton,BorderLayout.CENTER); //添加按键并且设置按键位置在中央显示
		add(jPanel,BorderLayout.CENTER); //添加Jpanel布局到jframe中,并且将位置设置在中央
		jButton.addActionListener(this);  //按键监听
		setSize(200, 200);  // 设置大小
		setVisible(true);  //显示框体
		validate(); //刷新验证
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		
		// TODO Auto-generated method stub
		if (e.getActionCommand() == "手动换颜色") { //判断按键是否按下手动换颜色	
		off_on = false; //修改布尔值
		h = (int)(Math.random()*361);
		s = (int)(Math.random()*101);
		b = (int)(Math.random()*101);
		int i = (int)(Math.random()*2);
		int j = (int)(Math.random()*2);
		jButton.setBackground(colors_data[i][(int)(Math.random()*(colors_data[i].length))]); //设置按键背景颜色
		jButton.setForeground(colors_data[j][(int)(Math.random()*(colors_data[j].length))]); //设置按键文本颜色
		jButton.setText("自动换颜色"); //修改文本内容
		}
		else if (e.getActionCommand() == "自动换颜色") { //判断按键文本内容
			off_on = true;
			jButton.setText("手动换颜色"); //修改按键文本
			if(!(thread.isAlive())) {  //判断线程是否关闭了,如果没有线程就创建一个新线程
				thread = new Thread(this); //创建新线程
			}
			thread.start(); //启动线程
		}
	}
	public static void main(String[] args) {
		new Demo4("就很帅");
	}

	@Override
	public void run() { //线程运行内容
		// TODO Auto-generated method stub	
		while (off_on) {	 //写一个while 循环修改按键颜色						
		h = (int)(Math.random()*361);
		s = (int)(Math.random()*101);
		b = (int)(Math.random()*101);
		int i = (int)(Math.random()*2);
		int j = (int)(Math.random()*2);
		jButton.setBackground(colors_data[i][(int)(Math.random()*(colors_data[i].length))]); //设置按键背景颜色
		jButton.setForeground(colors_data[j][(int)(Math.random()*(colors_data[j].length))]);
		try {
			thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		validate();
		}
		
	}

	

}

运行结果:

posted on   观心静  阅读(495)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示