以前高中的时候,记得听别人班的同学说,有一位物理老师为了解决上课提问没人举手回答问题的尴尬情况,当时自己弄出了一个随机点学号的程序来点同学回答问题,当时感觉很新奇哈哈哈,然后今天没啥事,我也复刻了一下当年的这段记忆。
图形界面用的还是JFrame。
然后用用两个JTextField来接收随机数的范围,按下抽奖按钮就可以随机抽同学的学号了。
下面是源代码:
mainUI类,主要功能实现:
package UI;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import function.function;
public class mainUI extends JFrame implements ActionListener{
//成员变量
JTextField min=new JTextField();
JTextField max=new JTextField();
JButton start=new JButton();
int luck=0;
JMenuItem aboutme=new JMenuItem("关于作者");
//主界面的构造方法
public mainUI(){
jiemian();
function();
//将界面显示出来
this.setVisible(true);
}
private void jiemian() {
this.setSize(400,450);
this.setAlwaysOnTop(true);
this.setTitle("学生上课回答抽奖器");
//让界面一直在所有窗口的上方
this.setAlwaysOnTop(true);
//选择关闭方式
this.setDefaultCloseOperation(3);
//让界面出现在中央
this.setLocationRelativeTo(null);
setLayout(null);
}
private void function(){
//功能栏
JMenuBar jb=new JMenuBar();
JMenu about=new JMenu("关于");
aboutme.addActionListener(this);
jb.add(about);
about.add(aboutme);
this.setJMenuBar(jb);
//输入框
min.setBounds(150,170,150,30);
this.getContentPane().add(min);
max.setBounds(150,265,150,30);
this.getContentPane().add(max);
start.setText("开抽!");
start.setBounds(150,320,80,40);
this.getContentPane().add(start);
start.addActionListener(this);
//显示背景
JLabel bg=new JLabel(new ImageIcon("image/bg.jpg"));
bg.setBounds(0,0,400,450);
this.getContentPane().add(bg);
}
@Override
public void actionPerformed(ActionEvent e) {
Object o=e.getSource();
if (o==start){
luck=function.Randomid(min.getText(),max.getText());
System.out.println(luck);
//按下按钮后显示抽到的同学
JDialog Luck =new JDialog();
Luck.setTitle("恭喜你啊!");
JLabel j2=new JLabel();
j2.setText("恭喜"+luck+"号同学,你被抽中了!");
j2.setBounds(0,0,100,100);
Luck.getContentPane().add(j2);
Luck.setSize(200,100);
Luck.setAlwaysOnTop(true);
Luck.setLocationRelativeTo(null);
//设置不关闭弹窗就无法进行下一步操作
Luck.setModal(true);
Luck.setVisible(true);
}
else if (o==aboutme){
//设置关于作者这个功能的弹窗
JDialog jd=new JDialog();
JLabel j2=new JLabel(new ImageIcon("image/me.jpg"));
j2.setBounds(0,0,258,258);
jd.getContentPane().add(j2);
jd.setSize(344,344);
jd.setAlwaysOnTop(true);
jd.setLocationRelativeTo(null);
//设置不关闭弹窗就无法进行下一步操作
jd.setModal(true);
jd.setVisible(true);
}
}
}
然后抽奖功能中,从JTextField中有一个getText()的方法,但是这个方法的返回类型是String,又因为我想的随机数是要随机出 int 整型的,怎么把这个String类型的数字转成相应的整型,我后面想了一小会,写了这个方法。
package function;
import java.util.Random;
public class function {
//这个为抽奖机制的工具类
private function(){};
public static int Randomid(String min,String max){
Random r=new Random();
//将获得的字符串变成整型
int Max=change(max);
int Min=change(min);
int n=r.nextInt(Max-Min+1)+Min;
return n;
}
public static int change(String s) {
//我写了这个方法能将int类型范围内的所有String表示的数字字符串转变为相应的int类型
char[] arr = s.toCharArray();
int n = 0;
if (arr.length == 1) {
n = (int) arr[0] - 48;
return n;
}
else {
double a=0;
for (int i = 0; i < arr.length; i++) {
int b=(int)arr[i]-48;
a=a+b*Math.pow(10, arr.length-(i+1));
}
int c=(int)a;
return c;
}
}
}
这样一来,只要是在 int 整型范围内的,例如:”12345″ (string)转成 12345(int),我都可以转换了,我感觉还是挺实用的,下面这一段:
public static int change(String s) {
char[] arr = s.toCharArray();
int n = 0;
if (arr.length == 1) {
n = (int) arr[0] - 48;
return n;
}
else {
double a=0;
for (int i = 0; i < arr.length; i++) {
int b=(int)arr[i]-48;
a=a+b*Math.pow(10, arr.length-(i+1));
}
int c=(int)a;
return c;
}
}
最后就是测试类了:
import UI.mainUI;
import function.function;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
new mainUI();
}
}
运行的效果是这样的:
输入一下学号范围:
浅抽一下
再抽一下
感觉唯一有点用的,就是将String的数字转成int的那一段是有点用的,其他就当图一乐哈哈哈嘿嘿。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/79494.html