运行界面:

130458484.jpg

除了界面部分主要在于三个区域的处理:nameArea对输入作要求并把输入的所有符合要求的字符提取到personalArea区域,获取观众列表文本并作数组来处理,最后随机生成一名幸运观众。

详细代码及注释如下:

package com.lixiyu;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
public class SecondArray extends JFrame {
      
private JPanel contentPane;
private JTextField nameArea;
private JTextArea personalArea;
private JTextArea resultArea;
public static void main(String[] args){
    try{
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");//外观
          
    }catch(Throwable e){
        e.printStackTrace();
    }
EventQueue.invokeLater(new Runnable()
{
public void run(){
    try{
    SecondArray frame=new SecondArray();
    frame.setVisible(true);
}catch(Exception e){
    e.printStackTrace();
}
    }
});
}
public SecondArray(){
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 498, 300);
    contentPane=new JPanel();
    contentPane.setBorder(new EmptyBorder(5,5,5,5));
    setContentPane(contentPane);
    setTitle("利用数组随机抽取幸运观众");
    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, 174, 242);//前两个是坐标,后两个是宽度和高度
    contentPane.add(panel);
    panel.setLayout(new BorderLayout(0, 5));//布局管理器
      
    nameArea = new JTextField();
    nameArea.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent e) {
            do_textField_keyPressed(e);
        }
    });
    panel.add(nameArea, BorderLayout.NORTH);
    nameArea.setColumns(10);
      
    JScrollPane scrollPane = new JScrollPane();
    panel.add(scrollPane);
      
    personalArea = new JTextArea();
    personalArea.setEditable(false);
    scrollPane.setViewportView(personalArea);
      
    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);
    contentPane.add(panel_1);
    panel_1.setLayout(new BorderLayout(0, 0));
      
    JScrollPane scrollPane_1 = new JScrollPane();
    panel_1.add(scrollPane_1);
      
    resultArea = new JTextArea();
    resultArea.setEditable(false);
    resultArea.setLineWrap(true);
    scrollPane_1.setViewportView(resultArea);
      
    JButton button = new JButton("抽取");
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            do_button_actionPerformed(e);
        }
    });
    button.setBounds(407, 164, 63, 25);
    contentPane.add(button);
      
    JButton button_1 = new JButton("退出");
    button_1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            do_button_1_actionPerformed(e);
        }
    });
    button_1.setBounds(407, 215, 63, 25);
    contentPane.add(button_1);      //以上两个button为设置抽取和退出键
}
protected void do_textField_keyPressed(KeyEvent e) {
    if (e.getKeyChar() != '\n')// 不是回车字符不做处理
        return;
    String name = nameArea.getText();
    if (name.isEmpty())// 如果文本框没有字符串不做处理
        return;
    personalArea.append(name + "\n");// 把输入人名与回车符添加到人员列表
    nameArea.selectAll();// 选择文本框所有字符
}
/*以上是对字输入字符的限制并加到personalArea区域*/
protected void do_button_actionPerformed(ActionEvent e) {
    String perstring = personalArea.getText();// 获取人员列表文本
    String[] personnelArray = perstring.split("\n{1,}");// 获取人员数组
    int index = (int) (Math.random() * personnelArray.length);// 生成随机数组索引
    // 定义包含格式参数的中奖信息
    String formatArg = "本次抽取观众人员:\n\t%1$s\n恭喜%1$5s成为本次观众抽奖的大奖得主。"
            + "\n\n我们将为%1$s**颁发:\n\t土豪金Iphone5s一台";
    // 为中奖信息添加人员参数
    String info = String.format(formatArg, personnelArray[index]);
    resultArea.setText(info);// 在文本域显示中奖信息
}
protected void do_button_1_actionPerformed(ActionEvent e) {
    dispose();
}
}