Java GUI简单点名器

1、业务代码

package cn.polin.spider;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class SpiderName {

	// 主面板
	JFrame jFrame = new JFrame("蜘蛛点名");

	// 名字
	String[] stuName = { "刘德华", "张家辉", "林青霞", "梁朝伟", "范冰冰" };

	// 用于存储名字的标签
	JLabel nameJlabel = new JLabel();

	// 按钮
	JButton jButton = new JButton("开始");

	// 采用的是伪随机数,大家也可以不用这个,这个在网上可以找到java随机数的设置
	Random random = new Random();

	public void init() {
		// 窗口叉掉,程自动关闭
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// 提示标签页面
		JLabel jt = new JLabel("欢迎使用蜘蛛点名器");

		// 设置标签居中
		jt.setHorizontalAlignment(SwingConstants.CENTER);

		// 设置字体大小
		jt.setFont(new Font(null, 3, 20));

		// 设置名字显示的标签居中
		nameJlabel.setHorizontalAlignment(SwingConstants.CENTER);


		// 去除按钮文字边框
		jButton.setFocusPainted(false);

		// 设置按钮大小
		jButton.setSize(300, 200);

		// jButton绑定监听事件
		jButton.addActionListener(new ActionListener() {

			// 控制变量
			boolean flag = false;
			Timer timer;

			// 点击jButton按钮,执行该方法
			[@Override](https://my.oschina.net/u/1162528)
			public void actionPerformed(ActionEvent e) {

				// 创建定时器
				TimerTask timerTask = new TimerTask() {
					[@Override](https://my.oschina.net/u/1162528)
					public void run() {
						
						// 点名
						randomRollCall(nameJlabel);

					}

				};
				
				if (flag) {// 停止
					timer.cancel();
					timer = null;// 通知虚拟机回收垃圾
					flag = false;

					// 设置按钮的值
					jButton.setText("开始");

				} else {// 开始

					// 每50毫秒执行一次
					timer = new Timer();// timer cancel后没法再schedule,需要重新赋值
					timer.schedule(timerTask, 0, 50);
					flag = true;
					jButton.setText("停止");
				}
			}

		});
		// 获取JFrame的面板
		Container p = jFrame.getContentPane();

		// 设置布局方式,我采用的BorderLayout布局
		p.setLayout(new BorderLayout(3, 1));

		// 添加提示标签在北方
		p.add(jt, BorderLayout.NORTH);

		// 添加姓名标签在中央
		p.add(nameJlabel, BorderLayout.CENTER);

		// 添加按钮控件在南方
		p.add(jButton, BorderLayout.SOUTH);

		// 运行jFrame
		jFrame.pack();

		// 窗口居中
		setJFrameCenter(jFrame, 400, 247);

		// 设置可以显示
		jFrame.setVisible(true);

	}

	// 设置JFrame在显示器居中
	private void setJFrameCenter(JFrame jFrame, int width, int height) {
		jFrame.setSize(width, height);// 窗口大小
		int frameWidth = jFrame.getWidth(); // 获得窗口宽
		int frameHeight = jFrame.getHeight(); // 获得窗口高
		Toolkit kit = Toolkit.getDefaultToolkit(); // 定义工具包
		Dimension screenSize = kit.getScreenSize(); // 获取屏幕的尺寸
		int screenWidth = screenSize.width; // 获取屏幕的宽
		int screenHeight = screenSize.height; // 获取屏幕的高
		jFrame.setLocation(screenWidth / 2 - frameWidth / 2, screenHeight / 2
				- frameHeight / 2);// 设置窗口居中显示
	}

	// 获取随机的姓名
	private String getRandomName() {
		int a = 0;
		// random类去实现随机数时,只能设置上限,也就是说随机数产生的都是0-stuName.length之间的数字
		a = random.nextInt(stuName.length);
		// rd.setSeed();
		// a = (int)Math.random()*stuName.length;
		return stuName[a];
	}

	// 随机点名
	private void randomRollCall(JLabel nameJlabel) {
		// 获取随机的姓名
		String n = getRandomName();
		// 设置nameJlabel标签的文字
		nameJlabel.setText(n);

		// 设置字体
		nameJlabel.setFont(new java.awt.Font(n, 1, 35));
		// 设置字体颜色
		nameJlabel.setForeground(Color.red);
	}
}

2、main方法运行

package cn.polin.spider;

import javax.swing.SwingUtilities;

public class SpiderMain {
	public static void main(String[] args) {

		// 显示应用 GUI
		// 创建并显示GUI。出于线程安全的考虑, 这个方法在事件调用线程中调用。
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				SpiderName sn = new SpiderName();
				sn.init();
			}
		});
	}
}

转载于:https://my.oschina.net/bob1900/blog/994737

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值