用java制作一个简易抽签器

最近闲来无事,想用Java编写一个随机抽签器,最终编写后的运行结果是这样的
运行截图
下面说一下怎么具体实现,非常简单。

首先,要想出现这个滚动标签,首先必须要有一个窗口来承载它,所以要在main()方法中创建
出来一个窗口,位置和大小都可以自定义,合适即可。
	JFrame jf = new JFrame("随机抽签器");
	jf.setLocation(500, 200);
	jf.setSize(300, 300);
	jf.setResizable(false);
	jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	jf.setVisible(true);

几行代码,窗口就建好了,这里我设置的是窗口不可拉伸,关闭窗口即关闭该程序。

接下来,我们就要创建标签了,我们可以直接在主类里面进行创建,也可以新建一个类。因为Java是面向对象的开发思想,这里我选择的是新建一个PaintDraw类(继承JPanel类),在这个类里面对抽签器进行具体实现,之所以要继承JPanel类,是因为我们要将该类所绘制的内容放在一个面板上,再将此面板添加到我们刚才创建的窗口上。

随机抽签,随机数是不可少的。可以导入Random包,亦可以直接使用Math.random进行随机数的创建。

我们的标签内容都是文本,所以可以创建一个String类型的数组,用来存储标签内容,之后也便于
展示和调用。
	String[] text = new String[9];//创建内容数组,容量自定义
	int actionNumber = 1;//进行标记
	int resultNumber = (int)(Math.random()*(text.length));//初始化抽签结果标记(随机)
	
	public PaintDraw() {//抽签内容
		text = new String[]{" 打乒乓球"," 看剧"," 撸代码"," 听歌"," 钓鱼"," 动"," 玩手机"," 下电影"," 睡觉"};
	}

可以看到,我这里定义了两个变量,分别是actionNumber 和 resultNumber,这两个变量分别用来标记鼠标点击行为和抽签结果展示的数组下标(即程序刚开始是滚动显示,点击鼠标让其暂停,并随机展示标签数组中的一个元素)。

但是我想让代码重复利用度高一点,即打开程序后开始滚动,点击窗口暂停并展示结果,再点击窗口
继续进行滚动,依次这样,可是抽签多次。这样的话,展示的结果必然有多个,那么resultNumber
变量也必须在鼠标多次点击展示结果的时候产生多个随机数,所以产生随机数我单独写了个代码,一是
不容易混乱,而是方便调用。
public void changeText() {//如果活动标记为-1,说明抽签结束,要产生一个随机结果下标
		if (actionNumber == -1) {
			resultNumber = (int)(Math.random()*(text.length));
		}
	}
好了,接下来就是绘制面板了,因为窗口滚动显示文本和暂停显示抽签结果都是需要具备条件的,即
需要通过鼠标的单击事件,所以我们要给两种情况分别添加判断条件。
public void paint(Graphics g) {
		super.paint(g);
		g.drawRect(110, 100, 100, 30);
		g.drawString("点击窗口即可进行抽签...", 100, 170);
		
		if (actionNumber == -1) {//如果活动标记为-1,说明抽签结束,将changeText()方法随机生成的抽签结果下标进行展示
			g.setFont(new Font("华文新魏",Font.ITALIC,20));
			g.drawString(text[resultNumber], 120, 120);
		} else {
			//如果无变化,说明还没有进行抽签,继续展示滚动标签
			int index = (int)(Math.random()*(text.length));
			g.setFont(new Font("华文新魏",Font.ITALIC,20));
			g.drawString(text[index], 120, 120);
		}

}

这里面有个index,同样是产生随机下标的,之所以要放到里面,就是因为要达到滚动的效果。重绘一次产生一个随机下标,展示随机的标签内容。

下面是重绘的代码(这里是每隔80ms重绘一次):
	//对窗体内容进行重绘
	Timer time = new Timer();
	public void action() {
		time.schedule(new TimerTask(){
			public void run() {
				repaint();
			}
		},80,80);
	}

最后就要在main方法里把该面板加入窗口,并添加该面板的action方法,实现绘制的功能,同时要在窗口中添加一个鼠标单击事件监听。

main()方法的代码具体如下:
public static void main(String[] args) {
		PaintDraw pd = new PaintDraw();
		JFrame jf = new JFrame("随机抽签器");
		
		jf.setLocation(500, 200);
		jf.setSize(300, 300);
		jf.add(pd);
		pd.action();
		jf.setResizable(false);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setVisible(true);
		
		jf.addMouseListener(new MouseAdapter() {//添加鼠标点击事件,如果点击,就让actionNumber的标记值取反为-1,执行changeText()方法,随机展示结果
			//并将结果绘制在窗口上;继续单击窗口,actionNumber的值恢复成1,继续执行滚动绘制程序,以便程序可以多次使用
			public void mousePressed(MouseEvent e) {
				pd.actionNumber = -pd.actionNumber;
				pd.changeText();
			}
		});
}

好了,这就做成了一个简易抽签器,也很简单。我把完整代码粘贴在下方:

完整代码如下:
package drawing;

import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JPanel;

/*
 * 抽签器
 * 随机抽签,点击窗口开始,再点击窗口结束,显示抽签结果
 */
public class Drawing {
	
	public static void main(String[] args) {
		PaintDraw pd = new PaintDraw();
		JFrame jf = new JFrame("随机抽签器");
		
		jf.setLocation(500, 200);
		jf.setSize(300, 300);
		jf.add(pd);
		pd.action();
		jf.setResizable(false);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setVisible(true);
		
		jf.addMouseListener(new MouseAdapter() {//添加鼠标点击事件,如果点击,就让actionNumber的标记值取反为-1,执行changeText()方法,随机展示结果
			//并将结果绘制在窗口上;继续单击窗口,actionNumber的值恢复成1,继续执行滚动绘制程序,以便程序可以多次使用
			public void mousePressed(MouseEvent e) {
				pd.actionNumber = -pd.actionNumber;
				pd.changeText();
			}
		});
	}

}

class PaintDraw extends JPanel {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	String[] text = new String[9];//创建内容数组,容量自定义
	
	int actionNumber = 1;//进行标记
	
	int resultNumber = (int)(Math.random()*(text.length));//初始化抽签结果标记(随机)
	
	public PaintDraw() {//抽签内容
		text = new String[]{" 打乒乓球"," 看剧"," 撸代码"," 听歌"," 钓鱼"," 活动"," 玩手机"," 下电影"," 睡觉"};
	}
	
	public void changeText() {//如果活动标记为-1,说明抽签结束,要产生一个随机结果下标
		if (actionNumber == -1) {
			resultNumber = (int)(Math.random()*(text.length));
		}
	}
	
	public void paint(Graphics g) {
		super.paint(g);
		g.drawRect(110, 100, 100, 30);
		g.drawString("点击窗口即可进行抽签...", 100, 170);
		
		if (actionNumber == -1) {//如果活动标记为-1,说明抽签结束,将changeText()方法随机生成的抽签结果下标进行展示
			g.setFont(new Font("华文新魏",Font.ITALIC,20));
			g.drawString(text[resultNumber], 120, 120);
		} else {
			//如果无变化,说明还没有进行抽签,继续展示滚动标签
			int index = (int)(Math.random()*(text.length));
			g.setFont(new Font("华文新魏",Font.ITALIC,20));
			g.drawString(text[index], 120, 120);
		}

	}
	
	//对窗体内容进行重绘
	Timer time = new Timer();
	public void action() {
		time.schedule(new TimerTask(){
			public void run() {
				repaint();
			}
		},80,80);
	}
	
}

当然,这只是一个简单的抽签器雏形,后期也可以通过添加边框,按钮和色彩模糊让其更加完善,美观实用。

  • 11
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 好的,以下是一个简单的Java GUI抽签小程序的代码: ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DrawLotsGUI extends JFrame implements ActionListener { private JLabel label; private JButton button; private String[] lots = {"大吉", "中吉", "小吉", "吉", "末吉", "凶", "大凶"}; public DrawLotsGUI() { super("抽签"); setSize(300, 200); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); label = new JLabel("请点击“抽签”按钮", JLabel.CENTER); button = new JButton("抽签"); button.addActionListener(this); JPanel panel = new JPanel(new BorderLayout()); panel.add(label, BorderLayout.CENTER); panel.add(button, BorderLayout.SOUTH); getContentPane().add(panel); } public void actionPerformed(ActionEvent e) { int index = (int)(Math.random() * lots.length); label.setText(lots[index]); } public static void main(String[] args) { DrawLotsGUI drawLotsGUI = new DrawLotsGUI(); drawLotsGUI.setVisible(true); } } ``` 这个程序使用JFrame作为主窗口,包含一个JLabel和一个JButton组件,点击按钮可以随机抽取一个签,并在JLabel中显示。程序中的lots数组保存了所有签的内容。 ### 回答2: 抽签是一种常见的小程序,可以通过Java GUI(图形用户界面)来实现。下面是一个Java GUI制作抽签小程序的简单示例。 首先,我们需要创建一个JFrame实例作为应用程序的主窗口。可以使用Swing库中的JFrame类来实现这一点。然后,我们需要在主窗口中添加一个来放置小程序的其他组件。 接下来,我们可以在容内添加一个JLabel标签,用来显示抽签结果。我们可以在标签的文本属性中设置一个默认值,如"点击按钮抽签"。 然后,我们可以添加一个JButton按钮,用于触发抽签功能。可以使用Swing库中的JButton类来实现这一点。通过添加ActionListener来监听按钮的点击事件,当按钮被点击时,我们可以在标签上显示随机抽签的结果。 为了实现抽签的功能,我们可以创建一个字符串数组,其中存储了一系列的抽签结果。可以使用Random类来生成一个随机数,并将其作为数组的索引来获取随机的抽签结果。 最后,在主窗口的构造函数中,我们可以设置窗口的大小和关闭操作。可以使用setSize()方法设置窗口的宽度和高度。可以使用setDefaultCloseOperation()方法设置窗口关闭时的操作。 通过使用这些基本的Java GUI组件和事件监听,我们就可以实现一个简单的抽签小程序。当用户点击按钮时,程序会随机显示一个抽签结果。这个小程序可以在Java的GUI环境中进行运行,并且界面友好,易于使用。 ### 回答3: 可以使用Java GUI制作一个抽签小程序。首先我们需要创建一个GUI界面,包括一个按钮和一个文本框用于显示抽签结果。当用户点击按钮时,程序会随机从一个预先定义的抽签池中选取一张抽签。下面是一个简单的示例代码: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class LotteryApp extends JFrame { private JButton drawButton; // 抽签按钮 private JTextArea resultArea; // 显示结果文本框 private String[] lotteryPool = { "大吉", "中吉", "小吉", "吉", "末吉", "凶" // 预先定义的抽签池 // 可根据需要添加或修改抽签池中的内容 }; public LotteryApp() { setTitle("抽签小程序"); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); drawButton = new JButton("抽签"); resultArea = new JTextArea(); drawButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String result = drawLottery(); // 抽签操作 resultArea.setText(result); // 显示抽签结果 } }); setLayout(new FlowLayout()); add(drawButton); add(resultArea); } private String drawLottery() { int randomIndex = (int) (Math.random() * lotteryPool.length); return lotteryPool[randomIndex]; } public static void main(String[] args) { LotteryApp app = new LotteryApp(); app.setVisible(true); } } ``` 通过运行上述代码,即可创建一个简单的抽签小程序。当用户点击“抽签”按钮时,程序会随机选择一个抽签结果,并在文本框中显示。抽签池中的内容可以根据需求进行修改或扩展。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值