`

有趣的java彩蛋程序

阅读更多

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

 

分享到:
评论
1 楼 monsterhuan 2013-07-21  
贴张图片看看嘛

相关推荐

    Java中国论坛程序 v0.1.7.zip

    Java中国论坛程序简介 Java中国是一款开源免费的论坛程序,致力于打造一个简洁优质的Java程序员论坛。 Java中国论坛程序特性 界面简洁清爽,对移动端友好 支持markdown语法 支持Emoji表情输入 支持Github账户...

    Java中国论坛开源.zip

    JavaChina是使用 Blade 框架搭建的一套简洁的论坛程序。演示地址 http://java-china.org  特性界面简洁清爽,对移动端友好支持markdown语法支持Emoji表情输入支持Github账户登录支持@用户支持在线播放音乐(小...

    Java 200行代码画了三种浪漫的圣诞树的实例代码

    - 程序内置一个动画彩蛋,谁用谁知道牛逼! 从此案例中你能学习到什么: - 能学习到高级轮廓(比如树)的纯代码绘制 - 能学习到不规则图形,如何进行纹理填充 - 能学习到面向对象的高级编程思想 示例代码: for ...

    JavaChina 开源论坛程序 v1.0

    Java中国是一款开源免费的论坛程序,致力于打造一个简洁优质的Java程序员论坛。特性:界面简洁清爽,对移动端友好支持markdown语法支持Emoji表情输入支持Github账户登录支持@用户支持在线播放音乐(小彩蛋)每日励志...

    SimplyJServer:然而,地球上最快的最轻便的Java HTTP Server!

    为Java开发人员制作自己的Web应用程序而制作的HTTP Java服务器 特征 低内存使用量“约12MB” LFI保护 DoS防护 使用纯Java进行纯编程 自定义状态代码 GZip是可选的 RAM使用情况监控器 将请求正文存储在非GET请求中 ...

    JavaChina 开源论坛程序源代码

    Java中国是一款开源免费的论坛程序,致力于打造一个简洁优质的Java程序员论坛。 特性: 界面简洁清爽,对移动端友好 支持markdown语法 支持Emoji表情输入 支持Github账户登录 支持@用户 支持在线播放音乐(小彩蛋) ...

    java版商城源码-too-small-in-the-mall:大约1989年的文字冒险游戏

    多年来,我将其翻译成其他语言,并将其作为复活节彩蛋嵌入到我参与的几个软件项目中。 它在基于 Web 的企业应用程序中作为 Java 小程序提供,在 Microsoft SmartClient UI 中作为加密的 .NET DLL 提供。 还有一个 GW

    java实战开发1200例源码-apple2_fantavision_reloaded:Fantavision(重装)

    java实战开发1200例源码最后更新:2020 年 11 月 6 日,星期五。 Fantavision(重装) “关于 Fantavision,你可能不想知道的一切。” :-) 目录 介绍空手道!? 准备 ESC 退出 Ye Olde 引导跟踪P5 引导程序 引导跟踪...

    ot-harjoitustyo

    该应用程序的目的是成为一个有趣的电影琐事单人游戏。 基本版本的计划功能 用户可以玩具有以下属性的有趣的电影琐事游戏: 两类难度的随机问题 每个问题的计时器,因难度而异 可见累积分数 用户可以选择问题难度:...

    SogetiEasterEggChallenge2021

    Sogeti复活节彩蛋挑战2021 参加Sogeti EasterEgg挑战赛的程序。 如果您尝试一下,也许您会看到鸡蛋(分拣出来)的孵化器;) 使用鼠标移动和旋转鸡蛋(单击鼠标右键旋转,滚动以向前或向后移动) 使用按键移动相机-a...

    adb1.0.26包含fastboot.exe

    如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。 设备驱动状态正常。 这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到...

Global site tag (gtag.js) - Google Analytics