`
tempsitegoogle
  • 浏览: 885757 次
文章分类
社区版块
存档分类
最新评论

Java Swing与线程的结合应用(三)

 
阅读更多

package com.han;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics2D;
import java.util.Random;

import javax.swing.JFrame;

/**
 * 利用线程在Swing窗口(顶级Container, 与JFrame有区别在于多了标题栏的空间)中画动态线条
 * 
 * @author HAN
 * 
 */
public class ThreadAndSwing_3 extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = -913556444768132509L;

	static Thread thread;
	Container container;

	enum Colors {
		BLACK(Color.BLACK),
		BLUE(Color.BLUE),
		CYAN(Color.CYAN),
		GREEN(Color.GREEN), 
		ORANGE(Color.ORANGE),
		YELLOW(Color.YELLOW), 
		RED(Color.RED), 
		PINK(Color.PINK), 
		LIGHT_GRAY(Color.LIGHT_GRAY);

		private Color c;

		private Colors(Color c) {
			this.c = c;
		}

		public Color getColor() {
			return this.c;
		}
	}

	public ThreadAndSwing_3() {
		// TODO Auto-generated constructor stub
		container = getContentPane();
		container.setLayout(null);
	}

	void paintJFrame() {
		thread = new Thread(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				/*
				 * Creates a graphics context for Container (you can also try it
				 * for JFrame)
				 */
				Graphics2D g = (Graphics2D) container.getGraphics();

				Colors[] colors = Colors.values();
				Random random = new Random();
				int y2 = 30;
				float width = 0;

				while (true) {
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
					/*
					 * Returns a pseudorandom, uniformly distributed int value
					 * between 0 (inclusive) and the specified value (exclusive)
					 */
					Color c = colors[random.nextInt(colors.length)].getColor();
					// System.out.println(c);

					g.setColor(c);
					g.setStroke(new BasicStroke(width++));

					/*
					 * Draws a line, using the current color, between the points
					 * (x1, y1) and (x2, y2) in this graphics context's
					 * coordinate system.
					 */
					g.drawLine(30, y2, 100, y2++);

					if (y2 > 70) {
						width = 0;
						y2 = 30;
					}

				}

			}

		});
		thread.start();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThreadAndSwing_3 frame = new ThreadAndSwing_3();
		frame.setTitle("利用线程在Swing窗口中画动态线条");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setBounds(100, 100, 300, 200);
		frame.setVisible(true); // display the frame

		/*
		 * because g will be null if Graphics g = container.getGraphics();
		 * before the display of the related component
		 */
		frame.paintJFrame();
	}

}


分享到:
评论

相关推荐

    java Swing 多线程下载器

    Java Swing多线程下载器是一种利用Java Swing库构建的图形用户界面(GUI)应用程序,它具备多线程下载功能,并支持断点续传。这样的工具类似于我们熟知的迅雷下载管理器,允许用户同时下载多个文件,提高下载速度,...

    java+swing漂亮软件界面+超酷+以及javaswing教程.7z

    "java+swing漂亮软件界面+超酷+以及javaswing教程.7z"这个压缩包文件显然包含了关于如何利用Java Swing创建出吸引人的、具有超酷效果的软件界面的资源和教程。 Java Swing 提供了一系列的组件,如JFrame,它是窗口...

    JAVA 开发 Swing与多线程

    在Java开发中,Swing库是用来构建图形用户界面(GUI)的工具包,而多线程则是提升程序并发性能和响应能力的关键技术。Swing虽然是Java语言的一部分,但它设计为单线程模型,主要是为了简化GUI编程并避免复杂的同步...

    java+swing聊天室

    总的来说,Java Swing聊天室项目结合了GUI设计、事件处理、网络编程和多线程技术,是一个全面展示Java桌面应用开发能力的好例子。通过学习和分析这样的项目,开发者不仅可以提升Swing应用的构建技巧,还能加深对Java...

    JAVA+多线程+swing和awt技术+ 飞机大战+学习Java者

    通过阅读和分析源码,可以了解Java的事件驱动编程、线程同步机制(如synchronized关键字和wait/notify方法),以及如何将GUI组件与业务逻辑结合。此外,也可以锻炼到问题解决和调试技巧,这对于任何编程学习者来说都...

    java swing 多功能 聊天室

    通过查看和学习这个项目的源码,开发者可以深入理解Java Swing在实际项目中的应用,以及如何结合网络编程实现一个功能完善的聊天室系统。 总的来说,"java swing 多功能 聊天室"项目展示了Java Swing在构建复杂GUI...

    JAVA SWING 多线程扫描局域网IP及端口 v2 源码

    在"JAVA SWING 多线程扫描局域网IP及端口 v2 源码"这个项目中,我们可以看到开发者使用了Swing来创建一个图形化的用户界面,同时结合多线程技术来实现局域网内的IP和端口扫描。 1. **Swing基础**:Swing是Java AWT...

    利用JavaSwing、JavaSound实现简易音乐播放器

    通过这个项目,你可以学习到如何使用JavaSwing构建用户界面,以及如何结合JavaSound进行音频处理。同时,理解多线程和事件处理在GUI应用中的重要性,以及如何有效地组织和管理这些组件。这是一个很好的实践项目,有...

    java swing 增删改查

    在这个"java swing 增删改查"的小项目中,我们可以推测开发者利用Swing 创建了一个简单的数据库操作应用,允许用户对数据进行添加、删除、修改和查询。 在Java Swing中,主要涉及以下几个核心知识点: 1. **容器与...

    Java Swing 点名系统

    在技术实现上,Java Swing是一个轻量级的GUI工具包,它是Java Foundation Classes (JFC)的一部分,用于构建与平台无关的桌面应用程序。在Java Swing点名系统中,Swing组件被用来创建各种交互式的界面元素,如按钮、...

    基于swing多线程的赛马游戏

    在Java编程领域,Swing库被广泛用于构建桌面应用程序,因为它提供了丰富的组件和灵活的界面设计。本项目“基于Swing多线程的赛马游戏”是一个很好的实践案例,它结合了Swing图形用户界面(GUI)和多线程技术,以模拟...

    Java Swing图形界面开发与案例详解及随书实例代码

    在本教程中,我们将深入探讨Java Swing的各个方面,并结合实例代码来帮助你理解和应用这些知识。 首先,我们要了解Swing的基本组件。这些组件包括JFrame(主窗口)、JPanel(容器)、JButton(按钮)、JLabel(标签...

    酒店管理系统 java swing

    【酒店管理系统】是一款基于Java Swing开发的桌面应用程序,主要用于实现酒店日常运营的信息化管理。Swing是Java标准库中的一个图形用户界面(GUI)工具包,它提供了丰富的组件和功能,使得开发者能够创建出功能完备...

    java swing url下载器

    标签“java swing 下载”表明该应用的核心功能是文件下载,结合Swing技术实现用户友好的界面。在实际项目中,可能还需要考虑其他特性,如暂停、恢复、取消下载,以及错误处理和重试机制。 压缩包内的文件列表: - `...

    java swing 鼠标自动移动

    综上所述,"java swing 鼠标自动移动"项目结合了Java Swing GUI编程、鼠标事件处理、Robot类的使用、以及应用打包技术,为开发者提供了一个实用的示例,展示了如何在Java环境中实现鼠标自动移动。

    Java Swing版本五子棋

    Java Swing 是Java GUI(图形用户界面)库,用于构建桌面应用程序。在这个项目中,"Java Swing版本五子棋"是一个使用Swing开发的五子棋游戏。它提供了多个版本,包括简易版、复杂版和AI对弈版本,适应不同程度的玩家...

    JAVA SWING 多人聊天

    总结起来,"JAVA SWING 多人聊天"项目是一个结合了Java Swing GUI设计、TCP网络编程以及Socket通信的实例,展示了如何构建一个稳定的多人聊天平台。对于学习者来说,这个项目不仅能够加深对Swing组件使用的理解,还...

    javaswing游戏开发-捕鱼达人

    学习这个项目,初学者可以了解到如何在Java中组织代码结构,如何使用Swing组件创建复杂的用户界面,以及如何将业务逻辑与GUI结合。 总的来说,"javaswing游戏开发-捕鱼达人"项目提供了一个全面的学习Java Swing和...

    java swing

    在实际编程中,Swing应用程序可以通过SwingUtilities.invokeLater()方法启动,确保组件的绘制在事件调度线程中进行,遵循Java GUI的线程安全原则。 总而言之,Java Swing是开发Java桌面应用的强大工具,它提供了...

    java swing socket写的聊天工具

    Java Swing 是Java GUI(图形用户界面)库,用于构建桌面应用程序。...总的来说,这个Java Swing和Socket结合的聊天工具是一个综合性的项目,涵盖了GUI设计、网络编程、多线程和并发控制等多个IT领域的知识点。

Global site tag (gtag.js) - Google Analytics