07、利用数组随机抽取幸运观众

运行效果图:

在这里插入图片描述

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 java.lang.reflect.InvocationTargetException;

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 Test extends JFrame {

	JPanel conventPane;
	JTextField nameField;
	JTextArea personArea;
	JTextArea ansowerArea;
	
	public static void main(String[] args) {
		
		try {
			//设置窗体主题风格
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch (Throwable e) {
			e.printStackTrace();
		}
		
		try {
		//保证线程安全
			EventQueue.invokeAndWait(new Runnable() {
				
				@Override
				public void run() {
					Test Frame = new Test();
					Frame.setVisible(true);
				}
			});
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public Test() {
		conventPane = new JPanel();
		conventPane.setLayout(null);
		//conventPane距离边界的上左下右距离
		conventPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		this.setTitle("利用数组随机抽取幸运观众");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setContentPane(conventPane);
		this.setBounds(100, 100, 498, 300);

		//、创建容器panel并设置基本属性
		JPanel panel = new JPanel();
		 /*
         * TitledBorder(Border border,String title,int TitleJustiFication,
         *int TitlePosition,Font TitleFont,Color TitleColor )
         *第一个参数是边框,第二个参数是标题,第三个参数是
         *new color(int a,int b,int c)创建具有指定红色、绿色、蓝色值的
         *不透明的sRGB,这些值都在0~255之间*/
		panel.setBorder(new TitledBorder(null,"将现场观众的姓名添加到抽奖箱中,按回车键确认",
				TitledBorder.LEADING,TitledBorder.TOP,null,new Color(0,0,255)));
		panel.setBounds(10, 10, 174, 242);
		panel.setLayout(new BorderLayout(0,5));
		conventPane.add(panel);
		
		//、创建姓名文本框
		nameField = new JTextField();
		//、设置列宽
		nameField.setColumns(10);
		//、添加到容器panel中,并且位于最上面
		panel.add(nameField,BorderLayout.NORTH);
		//、给姓名文本框添加监听,当键盘按下时被触发
		nameField.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				do_Text_KetPressed(e);
			}
		});
		
		//、创建滚动条,添加到容器panel中
		JScrollPane scrollPane = new JScrollPane();
		panel.add(scrollPane);
		
		//、创建存放姓名的文本域
		personArea = new JTextArea();
		//、该区域不可编辑,防止加入不在现场参与的人员
		personArea.setEditable(false);
		//、为存放姓名的区域添加滚动条,人数可能特别多
		scrollPane.setViewportView(personArea);
		
		//、创建容器panel_1,并进行基本设置
		JPanel panel_1 = new JPanel();
		panel_1.setBorder(new TitledBorder(null,"选取的观众人员是",TitledBorder.LEADING,
				TitledBorder.TOP,null,new Color(255,0,0)));
		//、边界布局管理器,第一个参数为水平间距,第二个参数为垂直间距
		panel_1.setLayout(new BorderLayout(0,0));
		panel_1.setBounds(183, 10, 219, 242);
		conventPane.add(panel_1);
		
		//、创建显示幸运观众的文本域
		ansowerArea = new JTextArea();
		//、该文本域中的数据也是不可编辑,防止修改最终的获奖观众
		ansowerArea.setEditable(false);
		//、可以自动换行,否则数据会出现在同一行
		ansowerArea.setLineWrap(true);
		
		//、创建滚动条,并为最终幸运观众文本域添加
		JScrollPane scrollPane_1 = new JScrollPane();
		//scrollPane_1.add(ansowerArea);
		panel_1.add(scrollPane_1);
		scrollPane_1.setViewportView(ansowerArea);
		
		//、创建抽取幸运观众按钮
		JButton button = new JButton("抽取");
		button.setBounds(407, 164, 63, 25);
		//、为按钮添加监听器,当按钮按下的时候发生作用
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				do_button_actionPerformed();
			}
		});
		conventPane.add(button);
		
		//、创建退出按钮
		JButton button_1 = new JButton("退出");
		button_1.setBounds(407, 215, 63, 25);
		//、为退出按钮添加监听器,当按钮按下的时候起作用
		button_1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				do_button_1_actionPerformed();
			}
		});
		conventPane.add(button_1);
	}

	//、编辑退出按钮事件的处理方法
	protected void do_button_1_actionPerformed() {

		dispose();
	}

	//、编辑抽取按钮的处理方法
	protected void do_button_actionPerformed() {
		String perstring = personArea.getText();// 获取人员列表文本
        String[] personnelArray = perstring.split("\n{1,}");// 获取人员数组
        int index = (int) (Math.random() * personnelArray.length);// 生成随机数组索引
        // 、定义包含格式参数的中奖信息
        //%1$s格式化字符串,替换一个特定的字符串,按照要求输出
        String formatArg = "本次抽取观众人员:\n\t%1$s\n恭喜%1$s成为本次观众抽奖的大奖得主。"
                + "\n\n我们将为%1$s颁发:\n\t过期的酸奶二十箱。";
        // 、为中奖信息添加人员参数
        String info = String.format(formatArg, personnelArray[index]);
       ansowerArea.setText(info);// 在文本域显示中间信息
		
	}

	//、编写添加姓名文半框监听的实现方法
	protected void do_Text_KetPressed(KeyEvent e) {

		if (e.getKeyChar() != '\n')// 不是回车字符不做处理
            return;
        String name = nameField.getText();
        if (name.isEmpty())// 如果文本框没有字符串不做处理
            return;
        personArea.append(name + "\n");// 把输入人名与回车符添加到人员列表
        personArea.selectAll();// 选择文本框所有字符
	}
}

发布了36 篇原创文章 · 获赞 50 · 访问量 9764

猜你喜欢

转载自blog.csdn.net/qq_41765969/article/details/93002140
今日推荐