有趣的java彩蛋程序
帮别人做课程设计,无意中看到一道彩蛋程序的题。觉得挺有意思的,这也是我第一次接触到动态显示的程序,感觉很有趣,很乐意在这里跟大家分享一下。
题目的要求是从界面输入行数和列数后,按下确定按钮后,在界面正中央出现一系列颜色不断变化闪烁的椭圆形彩蛋。
实现的思路也很简单,界面就不说了,彩蛋的绘制思路就是通过随机数使椭圆颜色的三个参数值不断变化,再通过不断重绘实现图形的“闪烁”。注意为了使程序灵活性更高,要把重绘放到一个线程中运行,防止整个窗体陷入死循环。
废话不多说了直接贴代码。
PS:我后来想了想,其实稍稍一改还可以做出颜色由浅到深类似呼吸灯的变化效果,或者同时实现彩蛋的位置不断移动,即完全的动画效果,大家可以一起试试!
主窗体:
package 彩蛋; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class MyJFrame extends JFrame{ public DrawComponent dc = new DrawComponent(); public static void main(String[] args) { MyJFrame jmf= new MyJFrame(); jmf.initUI(); } private void initUI() { this.setSize(600,500); this.setDefaultCloseOperation(3); this.setTitle("我的彩蛋"); JPanel jp = new JPanel(); jp.setSize(50, 0); jp.setLayout(new FlowLayout()); this.add(BorderLayout.SOUTH,jp); JLabel j1 = new JLabel("行数"); JTextField jtf1 = new JTextField(); jtf1.setPreferredSize(new Dimension(20,30)); JLabel j2 = new JLabel("列数"); JTextField jtf2 = new JTextField(); jtf2.setPreferredSize(new Dimension(20,30)); JButton jb = new JButton("确定"); MyActionListener ma = new MyActionListener(dc,jtf1,jtf2); jb.addActionListener(ma); jp.add(j1); jp.add(jtf1); jp.add(j2); jp.add(jtf2); jp.add(jb); this.add(dc); this.setVisible(true); } }
绘制彩蛋的组件
package 彩蛋; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.util.Random; import javax.swing.JComponent; public class DrawComponent extends JComponent { private int row =0,column = 0; //重绘方法 public void paintComponent(Graphics g) { this.setPreferredSize(new Dimension(400,400)); Random rand = new Random(); for(int i = 0;i<this.row;i++){ for(int j = 0;j<this.column;j++){ int r1 = rand.nextInt(256); int g1 = rand.nextInt(256); int b1 = rand.nextInt(256); Color c = new Color(r1,g1,b1); g.setColor(c); g.fillOval(j*100+100, i*50+50, 100, 50); } } } public int getRow() { return row; } public void setRow(int row) { this.row = row; } public int getColumn() { return column; } public void setColumn(int column) { this.column = column; } }
监听器:
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JTextField; public class MyActionListener implements ActionListener { public JTextField jtf1,jtf2; public DrawComponent dc; private MyThread m1; public MyActionListener(DrawComponent dc,JTextField jtf1, JTextField jtf2) { this.dc = dc; this.jtf1 = jtf1; this.jtf2 = jtf2; } public void actionPerformed(ActionEvent e) { //得到文本框的文本值 int row = Integer.parseInt(this.jtf1.getText()); int column = Integer.parseInt(this.jtf2.getText()); //启动线程 if(m1 == null){ m1 = new MyThread(this.dc); m1.start(); } this.dc.setColumn(column); this.dc.setRow(row); } }
线程:
package 彩蛋; class MyThread extends Thread{ public DrawComponent dc; public MyThread(DrawComponent dc){ this.dc = dc; } public void run(){ while (true){ this.dc.repaint(); } } }
相关推荐
Java中国论坛程序简介 Java中国是一款开源免费的论坛程序,致力于打造一个简洁优质的Java程序员论坛。 Java中国论坛程序特性 界面简洁清爽,对移动端友好 支持markdown语法 支持Emoji表情输入 支持Github账户...
JavaChina是使用 Blade 框架搭建的一套简洁的论坛程序。演示地址 http://java-china.org 特性界面简洁清爽,对移动端友好支持markdown语法支持Emoji表情输入支持Github账户登录支持@用户支持在线播放音乐(小...
- 程序内置一个动画彩蛋,谁用谁知道牛逼! 从此案例中你能学习到什么: - 能学习到高级轮廓(比如树)的纯代码绘制 - 能学习到不规则图形,如何进行纹理填充 - 能学习到面向对象的高级编程思想 示例代码: for ...
Java中国是一款开源免费的论坛程序,致力于打造一个简洁优质的Java程序员论坛。特性:界面简洁清爽,对移动端友好支持markdown语法支持Emoji表情输入支持Github账户登录支持@用户支持在线播放音乐(小彩蛋)每日励志...
为Java开发人员制作自己的Web应用程序而制作的HTTP Java服务器 特征 低内存使用量“约12MB” LFI保护 DoS防护 使用纯Java进行纯编程 自定义状态代码 GZip是可选的 RAM使用情况监控器 将请求正文存储在非GET请求中 ...
Java中国是一款开源免费的论坛程序,致力于打造一个简洁优质的Java程序员论坛。 特性: 界面简洁清爽,对移动端友好 支持markdown语法 支持Emoji表情输入 支持Github账户登录 支持@用户 支持在线播放音乐(小彩蛋) ...
多年来,我将其翻译成其他语言,并将其作为复活节彩蛋嵌入到我参与的几个软件项目中。 它在基于 Web 的企业应用程序中作为 Java 小程序提供,在 Microsoft SmartClient UI 中作为加密的 .NET DLL 提供。 还有一个 GW
java实战开发1200例源码最后更新:2020 年 11 月 6 日,星期五。 Fantavision(重装) “关于 Fantavision,你可能不想知道的一切。” :-) 目录 介绍空手道!? 准备 ESC 退出 Ye Olde 引导跟踪P5 引导程序 引导跟踪...
该应用程序的目的是成为一个有趣的电影琐事单人游戏。 基本版本的计划功能 用户可以玩具有以下属性的有趣的电影琐事游戏: 两类难度的随机问题 每个问题的计时器,因难度而异 可见累积分数 用户可以选择问题难度:...
Sogeti复活节彩蛋挑战2021 参加Sogeti EasterEgg挑战赛的程序。 如果您尝试一下,也许您会看到鸡蛋(分拣出来)的孵化器;) 使用鼠标移动和旋转鸡蛋(单击鼠标右键旋转,滚动以向前或向后移动) 使用按键移动相机-a...
如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。 设备驱动状态正常。 这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到...