学习Java也快半年,想想期初之所以走上这条不归路,还是在大学期间每次解决一道C语言的小试题都格外开心,不管怎么说始终认为编程本身就是一件很有趣味的事,随着开始学习Java , 貌似趣味性也随之变淡,于是乎在业余时间找些自己感兴趣的东西,试着去学习,也算为现在每天的学习生活添加一丝色彩。很喜欢Alan J. Perlls写在《计算机程序的构造和解释》一书前言上的一段话:
言归正传,这一程序原是大学期间某同学恶搞发的,还蛮有意思,在查资料了解了下基本的API后,稍作整理,也算大家一起娱乐一下。以下是通过Java AWT\Swing 写的一个简单桌面应用程序,先上效果吧:
如图所示,我们要做的是在桌面上疯狂打印RMB,是不是感觉很爽,那么是怎么实现呢?其实我对Java AWT\Swing知识点还是不太熟,好在代码还是比较简单,稍微查下API还是可以搞定的。
实现原理:截取一张屏幕大小的图片绘制为画布背景,再在该基础上无限随机绘制RMB.
步奏分析:
1.自定义一个面板(JFrame),去除标题栏,并且大小和屏幕一样大
2.在该面板上添加画布(JPanel),将来所有的绘制都在该画布上进行
3.截取屏幕图片作为画布背景
4.覆写JFrame的 paint(Graphics g) 方法,该方法实现实际的绘制步奏
----先将截取的屏幕图片通过画笔g绘制到画布上
----无限循环绘制指定的RMB图片到随机的坐标上
5.调用JFrame的 setVisible(true) 方将面板显示出来
通过以上5步,就可实现上面效果,献上自定义JFrame代码,注释加的很详细,就不多做介绍了,测试代码在附件中下载即可:
- /**
- * 创建我们的自定义面板
- * */
- class WelfareJFrame extends JFrame {
-
- private Toolkit mToolkit; //一个基本的工具包 , 可以获取屏幕分辨率
- private List<Image> mImages; //传入要显示的图片集合
- private JPanel mJPanel; //画布
- private Image mScreenImage; //截取的屏幕图片
- private Random mRandom; //随机数
- private int sWidth; //屏幕宽度
- private int sHeight; //屏幕高度
- public WelfareJFrame() throws AWTException {
- mRandom = new Random();
- mToolkit = Toolkit.getDefaultToolkit();
- mImages = new ArrayList<Image>();
- mJPanel = new JPanel(); // 创建画布
- getContentPane().add(mJPanel); // 在画板上添加画布
- Dimension dt = mToolkit.getScreenSize(); // 获得屏幕大小
- sWidth = dt.width; // 屏幕宽度
- sHeight = dt.height; // 屏幕高度
- mScreenImage = new Robot().createScreenCapture(new Rectangle(dt)); // 截取屏幕背景图片
- setUndecorated(true); // 去掉标题栏
- setSize(sWidth, sHeight); // 设置画板大小
- }
- /**
- * 添加图片路径
- * */
- public WelfareJFrame addImgae(String locImagePath) {
- Image image = mToolkit.getImage(WelfareDemo.class
- .getResource(locImagePath));
- mImages.add(image);
- return this;
- }
- /**
- * 当调用setVisible(true)时 , 会调用该方法 利用画笔g 绘制画面
- * */
- @Override
- public void paint(Graphics g) {
- g.drawImage(mScreenImage, 0, 0, this); // 先绘制背景图片
- // 无限绘制传入的图片
- while (true) {
- try {
- Thread.sleep(200); // 休息200毫秒
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- // 随机坐标绘制传入的图片
- for (int i = 0; i < mImages.size(); i++) {
- g.drawImage(mImages.get(i),
- mRandom.nextInt(sWidth) - 200,
- mRandom.nextInt(sHeight) -200,
- null);
- }
- }
- }
-
- /**
- * 开始显示
- * */
- public void start() {
- this.setVisible(true); // 显示容器 【会自动调用paint()方法】
- }
- }
复制代码
|
|