Java霓虹灯的循环显示

2024-05-11 18:18
文章标签 java 显示 循环 霓虹灯

本文主要是介绍Java霓虹灯的循环显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一种方法:

 

package com.lab2;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;

public class NeonLight extends Canvas {    //霓虹灯
 private int x;   //x坐标
 private int y;  //y坐标
 private int flag;
 private int radius;  //半径
 public int getFlag() {
  return flag;
 }
 public void setFlag(int flag) {
  this.flag = flag;
 }
 public NeonLight(int x,int y,int radius,int flag){
  this.x = x; 
  this.y = y;
  this.radius = radius;
  this.flag = flag;
  this.setSize(radius,radius);
 }
 public int getX() {
  return x;
 }
 public void setX(int x) {
  this.x = x;
 }
 public int getY() {
  return y;
 }
 public void setY(int y) {
  this.y = y;
 }
 public void paint(Graphics g){
  if(flag == 0){
   g.setColor(Color.red);
  }
  else if(flag == 1){
   g.setColor(Color.blue);
  }
  else if(flag == 2){
   g.setColor(Color.green);
  }
  else if(flag == 3){
   g.setColor(Color.gray);
  }
  else if(flag == 4){
   g.setColor( Color.pink);
  }
  else if(flag == 5){
   g.setColor(Color.orange);
  }
  else if(flag == 6){
   g.setColor(Color.magenta);
  }
  else if(flag == -1){
   g.setColor( Color.black);
  }
  g.fillOval(0, 0, radius, radius);
 }
}

 

package com.lab2;

import java.awt.Color;

import javax.swing.JApplet;

public class NeonLightTest extends JApplet implements  Runnable{

 private Thread t1,t2,t3,t4,t5,t6,t7;
 private NeonLight neonLight[];   //霓虹灯
 
 @Override
 public void destroy() {
  // TODO Auto-generated method stub
  super.destroy();
 }
 @Override
 public void init() {
  super.init();
  neonLight = new NeonLight[7];
  for(int i = 0;i<neonLight.length;i++){
   neonLight[i] = new NeonLight(60,0,60,i);
   neonLight[i].setLocation(60*(1+i), 0);
   this.add(neonLight[i]);
  }
  this.setSize(1360,800);
  repaint();
  
  t1 = new Thread(this);
  t1.setName("t1");
  t1.start();
 }
 @Override
 public void start() {
  // TODO Auto-generated method stub
  super.start();
 }
 @Override
 public void stop() {
  // TODO Auto-generated method stub
  super.stop();
 }
 public synchronized void LoopShowNeonLight() {   //循环显示霓虹灯
  
  if(Thread.currentThread().getName().equals("t1")){   //表示点亮第二个灯 
   System.out.println("进入线程1");
   int i = 0;
   for(i = 0;i<1;i++){
    neonLight[i].setFlag(1);
    repaint();
   }
   
   for(i = 1;i<neonLight.length;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   
   try {
    this.setSize(1361,800);
    Thread.sleep(500);   //睡眠0.5秒
    t2 = new Thread(this);
    t2.setName("t2");
    t2.start();
   } catch (Exception e) {
    e.printStackTrace();
   }
   
  }
  else if(Thread.currentThread().getName().equals("t2")){  //显示第三个灯
   System.out.println("进入线程2");
   int i = 0;
   for(i = 0;i<1;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   
   neonLight[i].setFlag(2);
   repaint();
   for(i = 2;i<neonLight.length;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   try {
    this.setSize(1362,800);
    Thread.sleep(500);   //睡眠0.5秒
    t3 = new Thread(this);
    t3.setName("t3");
    t3.start();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  else if(Thread.currentThread().getName().equals("t3")){
   System.out.println("进入线程3");
   int i = 0;
   for(i = 0;i<2;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   neonLight[i].setFlag(3);
   repaint();
   for(i = 3;i<neonLight.length;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   try {
    this.setSize(1363,800);
    Thread.sleep(500);   //睡眠0.5秒
    t4 = new Thread(this);
    t4.setName("t4");
    t4.start();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  else if(Thread.currentThread().getName().equals("t4")){
   System.out.println("进入线程4");
   int i = 0;
   for(i = 0;i<3;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   neonLight[i].setFlag(4);
   repaint();
   for(i = 4;i<neonLight.length;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   try {
    this.setSize(1364,800);
    Thread.sleep(500);   //睡眠0.5秒
    t5 = new Thread(this);
    t5.setName("t5");
    t5.start();

   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  else if(Thread.currentThread().getName().equals("t5")){
   System.out.println("进入线程5");
   int i = 0;
   for(i = 0;i<4;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   neonLight[i].setFlag(5);
   repaint();
   for(i = 5;i<neonLight.length;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   try {
    this.setSize(1359,800);
    Thread.sleep(500);   //睡眠0.5秒
    t6 = new Thread(this);
    t6.setName("t6");
    t6.start();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  else if(Thread.currentThread().getName().equals("t6")){
   System.out.println("进入线程6");
   int i = 0;
   for(i = 0;i<5;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   neonLight[i].setFlag(6);
   repaint();
   
   for(i = 6;i<neonLight.length;i++){
    neonLight[i].setFlag(-1);
    repaint();
   }
   try {
    this.setSize(1358,800);
    Thread.sleep(500);   //睡眠0.5秒
    t7 = new Thread(this);
    t7.setName("t7");
    t7.start();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  else if(Thread.currentThread().getName().equals("t7")){
   System.out.println("进入线程7");
  int i = 0;
  for(i = 0;i<6;i++){
   neonLight[i].setFlag(-1);
   repaint();
  }
  
  neonLight[i].setFlag(0);
  repaint();
  try {
   this.setSize(1357,800);
   Thread.sleep(500);   //睡眠0.5秒
   t1 = new Thread(this);
   t1.setName("t1");
   t1.start();
  } catch (Exception e) {
   e.printStackTrace();
  }
  }
 }
 @Override
 public void run() {
   LoopShowNeonLight();
 }
}

 

第二种方法:

package pack3;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.io.Serializable;

public class Lamp extends Canvas implements Serializable{
 int x;
 int y;
 int radius;
 Color color;
 public Lamp() {
  for(int i=0; i<7; i++){
   x=20;
   y=20;
   radius=20;
  }
 }
 public Lamp(int x, int y, int radius, Color color) {
  //super();
  this.x = x;
  this.y = y;
  this.radius = radius;
  this.color = color;
  this.setSize(radius, radius);
 }
 public int getX() {
  return x;
 }
 public void setX(int x) {
  this.x = x;
 }
 public int getY() {
  return y;
 }
 public void setY(int y) {
  this.y = y;
 }
 public int getRadius() {
  return radius;
 }
 public void setRadius(int radius) {
  this.radius = radius;
 }
 public Color getColor() {
  return color;
 }
 public void setColor(Color color) {
  this.color = color;
 }
 public void paint(Graphics g){
  g.setColor(color);
  g.fillOval(0, 0, radius, radius); //使用当前颜色填充外接指定矩形框的椭圆
  System.out.println("Lamp:paint");
  System.out.println("Lamp:paint:"+color.toString());
 }
}

 

package pack3;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;

public class Display extends Applet implements Runnable{
 Lamp lamp[]=new Lamp[7];
 Thread t1,t2;
 int i=0;
 Color color[]={Color.red,Color.pink,Color.blue,Color.green,Color.yellow,Color.orange,Color.cyan};
 Color color2;
 
 @Override
 public void destroy() {
  // TODO Auto-generated method stub
  super.destroy();
  System.out.println("destroy");
 }

 @Override
 public void init() {
  // TODO Auto-generated method stub
  super.init(); 
  t1 = new Thread(this);
  for(int i=0; i<7; i++){
   lamp[i] = new Lamp(20+20*i,20,15,Color.black);
   this.add(lamp[i]);
  }
  this.setSize(300,200);
  t1.start();
 }
 @Override
 public void paint(Graphics g) {
  System.out.println("paint");
 }

 @Override
 public void start() {
  // TODO Auto-generated method stub
  super.start();
  System.out.println("start");
 }

 @Override
 public void stop() {
  // TODO Auto-generated method stub
  super.stop();
  System.out.println("stop");
 }
 @Override
 public void run() {
  while (true) {   
   if(i>0){
    lamp[i-1].setColor(Color.black); //将上一个圆设置回黑色
   }
   i=i%7;
   lamp[i].setColor(color[i]);
   i++; 
   repaint();
   validate();
   try {
    this.setSize(300, 200);
    Thread.sleep(500);  //休眠500ms
    this.setSize(300,201);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
}

 

 

 

 

 

这篇关于Java霓虹灯的循环显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980290

相关文章

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Java中Scanner的用法示例小结

《Java中Scanner的用法示例小结》有时候我们在编写代码的时候可能会使用输入和输出,那Java也有自己的输入和输出,今天我们来探究一下,对JavaScanner用法相关知识感兴趣的朋友一起看看吧... 目录前言一 输出二 输入Scanner的使用多组输入三 综合练习:猜数字游戏猜数字前言有时候我们在

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将