如何用JAVA GUI编写一个点名系统程序?

问题遇到的现象和发生背景

用JAVA GUI编写一个点名系统程序

用代码块功能插入代码,请勿粘贴截图
package Text1;
//import java.awt.Font;
//import java.awt.event.ActionEvent;
//import java.awt.event.ActionListener;
//import javax.swing.JButton;
//import javax.swing.JFrame;
//import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class Text extends Thread implements ActionListener {
    String[] s= {"1","2","3","4","5","6","7","8","9","10"};
    JFrame frame=new JFrame("点名使用");
    JButton btn=new JButton("停止");
    JButton btn1=new JButton("结束");
    JTextField tf=new JTextField();
    public Text(){
        frame.setLayout(null);
        frame.setBounds(300, 400, 300, 350);//窗口大小
        tf.setBounds(80, 40, 150, 40);
        //tf.setFont(new Font("Monospaced", 23, 30));//文本框
        btn.setBounds(30, 160, 100, 100);//按钮大小
        btn1.setBounds(150, 160, 80, 100);
        frame.add(btn);
        frame.add(btn1);
        frame.add(tf);
        frame.setVisible(true);
        btn.addActionListener(this);//注册监听器
        btn1.addActionListener(this);
    }
    public void run(){
        for(int i=1;i<=10;i++){
            tf.setText(s[i-1]);
            try {
                sleep(80);//速度
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(i==10)i=1;
        }
    }
        public void actionPerformed (ActionEvent e) {
            if (e.getSource() == btn) {
                String str;
                if (btn.getText().equals("开始")) {
                    this.resume();//恢复线程的执行
                    btn.setText("停止");
                } else if (btn.getText().equals("停止")) {
                    this.suspend();//暂停线程执行
                    btn.setBackground(Color.LIGHT_GRAY);
                    str = tf.getText();
                    JOptionPane.showMessageDialog(null, String.format("抽到的幸运同学为:%s", str), "点名系统", JOptionPane.CANCEL_OPTION);
                    btn.setText("开始");
                }
            } else if (e.getSource() == btn1) {
                if (btn1.getText().equals("结束")) {
                    closeThis();
                }
                //创建一个新的窗口来盛放结果
                JFrame frame = new JFrame("最终结果");
                frame.setBounds(600, 300, 320, 260);
                frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
                Container c = frame.getContentPane();//网格布局
                c.setLayout(new GridLayout(5, 1));
                frame.setVisible(true);
                JTextField tf_A = new JTextField(tf.getText(),10);
                JTextField tf_B = new JTextField(tf.getText(),10);
                JTextField tf_C = new JTextField(tf.getText(),10);
                JTextField tf_D = new JTextField(tf.getText(),10);
                JTextField tf_E = new JTextField(tf.getText(),10);
                JLabel jl_A = new JLabel("第一名同学为");
                JLabel jl_B = new JLabel("第二名同学为");
                JLabel jl_C = new JLabel("第三名同学为");
                JLabel jl_D = new JLabel("第四名同学为");
                JLabel jl_E = new JLabel("第五名同学为");
                frame.add(jl_A);
                frame.add(tf_A);
                frame.add(jl_B);
                frame.add(tf_B);
                frame.add(jl_C);
                frame.add(tf_C);
                frame.add(jl_D);
                frame.add(tf_D);
                frame.add(jl_E);
                frame.add(tf_E);
            }
        }
    private void closeThis() {
        frame.dispose();
    }

    public static void main(String[] args) {
        Text m=new Text();
        m.start();
    }


}

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

就是弹出抽到的人后,将数据存入第二个窗口的第一个文本框,然后删除第一个窗口的数据,以此类推直到随机抽完五名同学,并将数据存入最终结果。

我想要达到的结果

就是在第一个窗口抽五名同学,按下结束后在第二个窗口能展现出五名同学的名字

目前代码存在什么问题?哪里实现不了。

我给你解决思路吧:

  1. 创建一个数组,保存所有同学的名字
  2. 当点击开始抽取的时候,从这个数组随机抽出一名同学,然后把这同学的名字从数组去除,或者是,下次抽取的时候,去判断,是不是已经被抽中了,怎么实现都可以,只要达到不会重复抽
  3. 然后把抽到的,保存到一个抽到的数组里面,你也可以创建五个变量,分别来保存,但是创建一个数组,不是更方便?最后,根据下标就可以取出了

创建一个对话框类,在实例化的时候将参数传入。
Swing设计的话,可以使用NetBeans可视化编程。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632