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();
} } }

运行结果:

Java Swing类 颜色、按键状态判断例子代码的更多相关文章

  1. Java Swing类 例子代码:将子类继承JFrame 并且接口按键监听ActionLisetener (将内容直接添加到JFrame不创建Contaniner)

    package rom; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import ...

  2. Delphi 判断按键状态

    Delphi 判断按键状态 http://blog.sina.com.cn/s/blog_54da9cc001015di1.html (2012-04-05 14:22:50) 标签: 杂谈 分类:  ...

  3. Java Swing 使用总结(转载)

    随笔转载自:此去经年ぢ 地址:http://www.cnblogs.com/FLFL/p/5369756.html 1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在 ...

  4. java swing 添加 jcheckbox复选框

    总体上而言,Java Swing编程有两大特点:麻烦.效果差. 麻烦是说由于设计器的使用不方便(如果您希望使用窗体设计器通过快速拖拽控件建立您的Java Swing GUI程序,请您使用MyEclip ...

  5. Java swing实现酒店管理系统

    今天给大家提供一个由今天给大家提供一个由Java swing实现的酒店管理系统,数据库采用sqlserver,我会贴上部分代码,完整的代码请看文章最下方下载,下面看代码: 1.主框架代码: packa ...

  6. 恶补Java Swing线程刷新UI机制(由浅到深的参考大佬博文)

    1. java中进度条不能更新问题的研究 感谢大佬:https://blog.csdn.net/smartcat86/article/details/2226681 为什么进度条在事件处理过程中不更新 ...

  7. Java根类Object的方法说明

    Java中的Object类是所有类的父类,它提供了以下11个方法: public final native Class<?> getClass() public native int ha ...

  8. Java设计模式(19)状态模式(State模式)

    State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式 State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If else ...

  9. atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结

    atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结 1. DND的操作流程 1 2. Html5 注 ...

随机推荐

  1. hadoop append 追加文件错误

    java.io.IOException:Failed to replace a bad datanode on the existing pipeline due to no more good da ...

  2. swiper4 一个页面多个轮播

    <div class="swiper-container"> <div class="swiper-wrapper"> <div ...

  3. Laravel + go-micro + grpc 实践基于 Zipkin 的分布式链路追踪系统 摘自https://mp.weixin.qq.com/s/JkLMNabnYbod-b4syMB3Hw?

    分布式调用链跟踪系统,属于监控系统的一类.系统架构逐步演进时,后期形态往往是一个平台由很多不同的服务.组件构成,用户请求过来后,可能会经过其中多个服务,如图 不过,出问题时往往很难排查,如整个请求变慢 ...

  4. webdriver 启动chrome时加载配置

    Selenium操作浏览器是不加载任何配置的,网上找了半天,关于Firefox加载配置的多点,Chrome资料很少,下面是关于加载Chrome配置的方法:  一.加载所有Chrome配置 用Chrom ...

  5. MySQL 单条记录长度最大65535

    今天设计表结构,加了几个字段,结果报错了 Ligne trop grande. Le taille maximale d'une ligne, sauf les BLOBs, est 65535... ...

  6. vue element-ui 用checkebox 来模拟选值 1/0

    https://jsfiddle.net/57dz2m3s/12/ 复制 粘贴 打开url就可以看到效果

  7. PREV-6_蓝桥杯_翻硬币

    问题描述 小明正在玩一个“翻硬币”的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如果同时翻转左边的两个 ...

  8. 导入数据库时出现ORA-01435: 用户不存在

    报错信息: IMP-00003: 遇到 ORACLE 错误 1435 ORA-01435: 用户不存在 成功终止导入,但出现警告. 我的导入脚本为: imp system/*****@min file ...

  9. Android兼容包之MultiDex

    一.MultiDex的产生背景 当Android系统安装一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt.DexOpt的执行过程是在第一次加载Dex文件的时候执 ...

  10. pyqt信号和槽传递额外参数

    转载:fengyu09 环境:python2.7.8 —— pyqt 4.11.1 使用Pyqt编程过程中,经常会遇到给槽函数传递额外参数的情况.但是信号-槽机制只是指定信号如何连接到槽,信号定义的参 ...