編寫程序,事先將所有觀眾姓名輸入數組,然後獲得數組元素的總數量,最後在數組元素中隨機抽取元素的下標,根據抽取的下標獲得幸運觀眾的姓名。
思路如下:
定義輸入框的按鍵事件,使用KeyEvent類的getKeyChar()函數判斷其是否是回車字符,若不是則不作處理;
使用isEmpty()函數判斷文本框中是否有字符串,如果沒有字符串則不做處理;
若為合法輸入則通過JTextArea類的append()方法把輸入人名與回車符添加到人員列表;
使用selectAll()方法選擇文本框所有字符;
定義點擊“抽取”按鈕時執行的函數,通過JTextArea類的getText()方法獲取人員列表文本,存入字符串;
創建一個字符串型一維數組,將之前的字符串按回車符分割後存入該數組;
通過Math.random()生成隨機數組索引,作為中獎者的數組下標;
定義包含格式參數的中獎信息;
通過String類的format()方法為中獎信息添加人員參數;
使用JTextArea類的setText()方法在文本域顯示中獎信息;
定義點擊“退出”按鈕時執行的函數,使用System.exit(0)方法退出程序。
代碼如下:
代碼如下:
package cn.edu.xidian.crytoll;
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.JLabel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
public class ArrayExample {
private JFrame frame;
private JTextField textField;
private JScrollPane scrollPane;
private JLabel label_1;
JTextArea textArea = new JTextArea();
private JTextArea textArea_1;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ArrayExample window = new ArrayExample();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public ArrayExample() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame("利用數組隨機抽取幸運觀眾");
frame.setBounds(100, 100, 500, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel label = new JLabel("\u8F93\u5165\u5728\u573A\u89C2\u4F17\u59D3\u540D\u6309\u56DE\u8F66");
label.setBounds(10, 10, 132, 15);
frame.getContentPane().add(label);
textField = new JTextField();
textField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
do_textField_keyPressed(e);
}
});
textField.setBounds(10, 35, 132, 21);
frame.getContentPane().add(textField);
textField.setColumns(10);
scrollPane = new JScrollPane();
scrollPane.setBounds(10, 66, 132, 185);
frame.getContentPane().add(scrollPane);
textArea_1 = new JTextArea();
scrollPane.setViewportView(textArea_1);
label_1 = new JLabel("\u9009\u53D6\u89C2\u4F17\u4EBA\u5458\uFF1A");
label_1.setBounds(180, 10, 132, 15);
frame.getContentPane().add(label_1);
textArea.setBounds(180, 34, 214, 217);
frame.getContentPane().add(textArea);
JButton button = new JButton("\u62BD\u53D6");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);
}
});
button.setBounds(404, 187, 70, 23);
frame.getContentPane().add(button);
JButton button_1 = new JButton("\u9000\u51FA");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_1_actionPerformed(e);
}
});
button_1.setBounds(404, 228, 70, 23);
frame.getContentPane().add(button_1);
}
protected void do_textField_keyPressed(KeyEvent e) {
if (e.getKeyChar() != '\n')// 不是回車字符不做處理
return;
String name = textField.getText();
if (name.isEmpty())// 如果文本框沒有字符串不做處理
return;
textArea_1.append(name + "\n");// 把輸入人名與回車符添加到人員列表
textField.selectAll();// 選擇文本框所有字符
}
protected void do_button_actionPerformed(ActionEvent e) {
String perstring = textArea_1.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$5s頒發:\n\t過期的酸奶二十箱。";
// 為中獎信息添加人員參數
String info = String.format(formatArg, personnelArray[index]);
textArea.setText(info);// 在文本域顯示中獎信息
}
protected void do_button_1_actionPerformed(ActionEvent e) {
System.exit(0);
}
}
效果如圖所示: