说明
一个抽“奖”器。
代码:
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();
}
}
}
}
效果图:
后记
编程萌新,无聊写点东西