java随机抽取-练习

说明

一个抽“奖”器。

代码:

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

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.text.BadLocationException;

public class RandomExtractApp extends JFrame implements ActionListener {
	// 变量重命名:选取变量右键→Refactor→rename
	JFrame jf;
	JTextArea jta; // 文本域
	JTextField jtf; // 文本框
	JPanel jp1, jp2;
	JButton jb1, jb2, jb3;
	JScrollPane jsp; // 下拉滚动条

	int columns; // JTextArea的行数

	String line; // txt文本的内容的行数

	File fff;
	FileOutputStream fos = null;
	BufferedReader br = null;

	// 开始
	public static void main(String[] args) {
		new RandomExtractApp();
	}

	// 窗体和界面设置
	public RandomExtractApp() {
		jf = new JFrame("随机抽样");
		jf.setSize(800, 500);
		jf.setLocationRelativeTo(null);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setResizable(false);
		jf.setLayout(new BorderLayout());

		// 东面板
		jp1 = new JPanel();
		jp1.setLayout(null);

		// 文本域
		jta = new JTextArea();
		jta.setLineWrap(true);// 激活自动换行功能
		jta.setWrapStyleWord(true);// 激活断行不断字功能
		jta.setEditable(false);// 不可编辑
		jta.setFont(new Font("楷体", Font.BOLD, 30));
		jsp = new JScrollPane(jta);// 文本滚动条
		jsp.setBounds(570, 50, 200, 350);
		try {
			InputTxt(); // 每次重启应用,自动导入名单
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 文本框
		jtf = new JTextField();
		jtf.setBounds(150, 160, 400, 180);
		jtf.setHorizontalAlignment(JTextField.CENTER);
		jtf.setFont(new Font("黑体", Font.BOLD, 60));
		jtf.setEditable(false);// 不可编辑

		// 按钮
		jp2 = new JPanel();
		jb1 = new JButton("点击抽取");
		jb1.addActionListener(this);// 添加点击事件监听
		jb2 = new JButton("修改名单");
		jb2.addActionListener(this);
		jb3 = new JButton("保存");
		jb3.addActionListener(this);
		jb3.setEnabled(false);// 按钮失效

		// 面板-添加组件(component)
		jp1.add(jsp);
		jp2.add(jb1);
		jp2.add(jb2);
		jp2.add(jb3);

		// 窗体-添加组件(component)
		jf.add(jtf);
		jf.add(jp1);
		jf.add(jp2, BorderLayout.SOUTH);

		// 显示界面
		jf.setVisible(true);
	}

	// 导出到txt
	public void OutputTxt() throws Exception {
		fff = new File("src/JTA.txt"); // 用来保存名单的位置
		if (!fff.exists()) {
			fff.createNewFile();
		}
		fos = new FileOutputStream(fff);
		String stxt = jta.getText().trim();
		byte[] bt = stxt.getBytes();
		fos.write(bt);// 输出到txt
	}

	// 读取txt文件
	public void InputTxt() throws Exception {
		br = new BufferedReader(new InputStreamReader(new FileInputStream(
				"src/JTA.txt"), "gbk"));// 输入JTextArea域文本
		String rn = "\r\n";
		while ((line = br.readLine()) != null) {
			jta.append(line.trim() + rn);
		}
	}

	// 按钮事件
	@Override
	public void actionPerformed(ActionEvent e) {
		int ran = 1;
		int start = 1, end = 1;
		columns = jta.getLineCount();// 获取JTextArea行数
		if (e.getSource() == jb1) { // 抽奖Listener
			if (jta.getText().trim().length() == 0) {// JTextArea判空
				return;
			} else {
				// 返回数组下标数据
				ran = (int) (Math.random() * (columns - 1)); // 获取数组下标
				try {
					start = jta.getLineStartOffset(ran);// 获取起始偏移量
					end = jta.getLineEndOffset(ran);// 获取结尾偏移量
					String str = jta.getText(start, end - start);// 取得(end-start)偏移量的行数据
					jtf.setText(str);
//					jta.paintImmediately(jta.getBounds()); //刷新,这句可有可无
				} catch (BadLocationException e1) {
					e1.printStackTrace();
				}
			}
		} else if (e.getSource() == jb2) {// 修改名单Listener
			jta.setEditable(true);
			jb3.setEnabled(true);
		} else if (e.getSource() == jb3) {// 保存Listener
			try {
				OutputTxt(); // 保存修改
				jta.setEditable(false);
				jb3.setEnabled(false);
				jta.setText("");// 清空文本域未修改内容
				InputTxt();// 重新导入数据
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}
	}
}

效果图:

java随机抽取-练习_第1张图片

后记

编程萌新,无聊写点东西

你可能感兴趣的:(java小东西)