作者:Waylon


java随机摇号小工具 java随机抽人程序_文本域

 

实现思路

1.创建窗体:用来显示在屏幕上和存放各种组件

2.创建一个文本框:用来实现用户的输入

3.创建两个多行文本域:用来显示观众信息和抽奖结果信息

4.创建两个按钮:用来开始抽奖和退出程序

所需技术

    本实例中的重点,是把字符串中的人员名单分割为数组,以及随机生成数组下标索引,这分别需要用到String类的spilt()方法和Math类的random()方法。

实现过程

1.创建窗体

关键代码如下:

public class Demo extends JFrame {
    /**
     * 创建窗体
     */
    public Demo() {
        setTitle("随机抽取幸运观众");
        setDefaultCloseOperation(EXIT_ON_CLOSE);//点击关闭程序
        setBounds(200, 200, 520, 300);//设置窗体的位置及大小
}

2.创建画板

关键代码如下:

private JPanel contentPane;
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));//创建空边框
        setContentPane(contentPane);
        setLayout(null);//不设置布局

        JPanel panel = new JPanel();
        //创建具有指定内容的边框
        panel.setBorder(new TitledBorder(null, "输入观众姓名并按回车", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(59, 59, 59)));
        panel.setBounds(10, 10, 175, 242);//设置panel的位置及大小
        contentPane.add(panel);
        panel.setLayout(new BorderLayout(0, 5));
        
        JPanel panel_1 = new JPanel();
        panel_1.setBorder(new TitledBorder(null, "抽奖结果:", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(59, 59, 59)));
        panel_1.setBounds(183, 10, 219, 242);
        panel_1.setLayout(new BorderLayout(0, 0));
        contentPane.add(panel_1);
        
        JScrollPane jscrollPane_1 = new JScrollPane();
        panel_1.add(jscrollPane_1);

3.创建多行文本域

关键代码如下:

personnelArea = new JTextArea();
        personnelArea.setEditable(false);
        jscrollPane.setViewportView(personnelArea);

        resultArea = new JTextArea();
        resultArea.setEditable(false);
        resultArea.setLineWrap(true);
        jscrollPane_1.setViewportView(resultArea);

4.创建文本框

关键代码如下:

nameField = new JTextField();
        nameField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                nameField_keyPressed(e);
            }
        });
        panel.add(nameField, BorderLayout.NORTH);
        nameField.setColumns(8);

5.创建按钮

关键代码如下:

ImageIcon icon1 = new ImageIcon("src/img_1.png");
        ImageIcon icon2 = new ImageIcon("src/img_2.png");
        JButton button_1 = new JButton();
        button_1.setIcon(icon1);//设置显示的图片
        JButton button_2 = new JButton();
        button_2.setIcon(icon2);//设置显示的图片
        button_1.setBounds(407, 20, 82, 32);
        button_2.setBounds(407, 65, 82, 32);
        contentPane.add(button_1);
        contentPane.add(button_2);

6.添加按钮动作事件

//添加按钮动作事件
        button_1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                button_1_actionPerformed(e);
            }
        });
        button_2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });

7.核心代码

    为文本框添加按键事件监听器,并编写事件处理方法,当用户在文本框中输入观众姓名并按下enter键时,如果文本内容为空,事件处理方法将发出提示信息,否则将观众姓名添加到文本域中,并以回车换行作为分隔符,然后选择文本框中所有的文本,准备接收用户的下一次输入。如果用户输入的观众姓名已经存在,则提示该观众已存在。具体代码如下:

private void nameField_keyPressed(KeyEvent e) {
        text = personnelArea.getText();// 获取人员列表文本
        split = text.split("\n{1,}");//创建人员数组
        if (e.getKeyChar() != '\n') {
            return;// 不是回车字符不做处理
        }
        String name = nameField.getText();
        if (name.isEmpty()) {
            // 如果内容为空,发出提示信息
            JOptionPane.showMessageDialog(null, "内容不能为空!");
        }
        //检查name是否已存在split数组当中
        for (int i = 0; i < split.length; i++) {
            if (name.equals(split[i])) {
                JOptionPane.showMessageDialog(null, "该观众已存在!");
                return;
            }
        }
        personnelArea.append(name + "\n");//将用户输入的文本添加到人员列表中
        nameField.selectAll();// 选择文本框所有字符
    }

        编写“立即抽奖”按钮的事件处理方法,通过随机数生成数组下标,当然这个下标是固定不变的,在在另一个文本域控件中输出抽取幸运观众的获奖信息,具体代码如下:

private void button_1_actionPerformed(ActionEvent e) {
        int a = (int) (Math.random() * split.length);//生成随机索引
        //格式化中奖信息
        String formatArg = "幸运观众:\n\t%1$s\n恭喜%1$s成为本次的大奖得主。" + "\n\n我们将为Ta颁发:\n\t过期的酸奶二十箱。\n让我们把掌声送给%1$s!";
        String format = String.format(formatArg, split[a]);
        resultArea.setText(format);
    }

java随机摇号小工具 java随机抽人程序_数组_02