public class Main {
public static void main(String[] args) {
//这里存入数据
String[] data = {"土一","李二","张三","李四","乔冠宇","王五"};
MyJFrame frame = new MyJFrame(data);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class MyJFrame extends JFrame {
String[] strings;
Thread thread;
public MyJFrame() throws HeadlessException {
JOptionPane.showMessageDialog(null,"数据未传入","数据异常",JOptionPane.ERROR_MESSAGE);
}
public MyJFrame(String[] strings) throws HeadlessException {
this.strings = strings;
this.setSize(400,400);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setTitle("抽取幸运儿");
JPanel jPanel_body = new JPanel(new GridLayout(3,1));
JPanel jPanel_top = new JPanel(new GridLayout(2,1));
JPanel jPanel_top_top = new JPanel();
jPanel_top.add(jPanel_top_top);
JPanel jPanel_top_bottom = new JPanel();
JLabel jLabel = new JLabel("新的幸运儿已经产生");
jLabel.setFont(new Font("宋体",Font.BOLD,20));
jPanel_top_bottom.add(jLabel);
jPanel_top.add(jPanel_top_bottom);
JPanel jPanel_center = new JPanel();
JTextField field = new JTextField(18);
field.setFont(new Font("宋体",Font.PLAIN,20));
jPanel_center.add(field);
JPanel jPanel_bottom = new JPanel();
JButton button = new JButton("暂停");
button.setPreferredSize(new Dimension(80, 32));
jPanel_bottom.add(button);
JButton jButton = new JButton("开始随机点人");
jButton.setPreferredSize(new Dimension(80, 32));
jPanel_bottom.add(jButton);
jButton.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
MyTask task = new MyTask(field,strings);
if(thread==null){
thread = new Thread(task);
thread.start();
}
}
});
button.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if(thread!=null){
thread.interrupt();
thread = null;
}
}
});
jPanel_body.add(jPanel_top);
jPanel_body.add(jPanel_center);
jPanel_body.add(jPanel_bottom);
this.add(jPanel_body);
this.setVisible(true);
}
}
import javax.swing.*;
import java.util.Random;
public class MyTask implements Runnable{
JTextField field;
String[] strings;
static Object object = new Object();
public MyTask(JTextField field, String[] strings) {
this.field = field;
this.strings = strings;
}
@Override
public void run() {
synchronized (object){
Random random = new Random();
while (true){
int index = random.nextInt(strings.length);
field.setText(strings[index]);
}
}
}
}
这里主要是运用到了JAVA中的GUI和线程的知识,?在界面类中,需要注意的是事件监听这里,两个按钮分别控制了线程的关闭和启动,而在线程类中,我们要注意的是创建新任务时传参的问题。