import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class asd extends JFrame{
private static final long serialVersionUID = 1L;
JFrame jframe= new JFrame("窗体生成");
JPanel jpanel=null;
JPanel imagePanel = null;
BufferedImage image= null;
JLabel label3 = new JLabel();
ImageIcon background = new ImageIcon();
JTextArea jtext = new JTextArea();
JButton jbutton1=new JButton("开始");
JButton jbutton2=new JButton("暂停");
JButton jbutton3=new JButton("确定");
String strPath = "";
public static boolean flag = true;//判断开始按钮是否被点过
private static Thread t;
private int count = 0;
public asd(){
//添加背景图片
try {
image=ImageIO.read(new File("F:\\95.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
background = new ImageIcon(image);
//把背景图片显示在一个标签里面
JLabel label = new JLabel(background);
//把标签的大小位置设置为图片刚好填充整个面板
label.setBounds(0,0,450,400);
//把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
imagePanel = (JPanel)getContentPane();
imagePanel.setOpaque(false);
//把背景图片添加到分层窗格的最底层作为背景
getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
//添加文字
jpanel = (JPanel)this.getContentPane();//每次添加必须要加的语句
JLabel label2 = new JLabel("请输入TXT文本路径:");
Font font = new Font("",Font.BOLD,30);
label2.setFont(font);
label2.setForeground(Color.yellow);
label2.setBounds(20,50,450,100);
jpanel.add(label2);
//添加按钮
jpanel=(JPanel)this.getContentPane();
jpanel.setLayout(null);
//(左,上,宽,高)
jbutton3.setBounds(new Rectangle(330,180,60,20));
jbutton3.addActionListener(new TextValue(this));
jpanel.add(jbutton3);
//添加文本框(左,上,宽,高)
jtext.setBounds(40, 180, 260, 20);
jpanel.add(jtext);
}
/**
* 重写构造器
*/
public asd(String str){
//将路径传入开始按钮
strPath = str;
//添加背景图片
try {
image=ImageIO.read(new File("F:\\图片\\95.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
background = new ImageIcon(image);
//把背景图片显示在一个标签里面
JLabel label = new JLabel(background);
//把标签的大小位置设置为图片刚好填充整个面板
label.setBounds(0,0,450,400);
//把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
imagePanel = (JPanel)getContentPane();
imagePanel.setOpaque(false);
//把背景图片添加到分层窗格的最底层作为背景
getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
//添加提示文字
jpanel = (JPanel)this.getContentPane();//每次添加必须要加的语句
JLabel label2 = new JLabel("点名开始啦!!!");
Font font = new Font("",Font.BOLD,30);
label2.setFont(font);
label2.setForeground(Color.yellow);
label2.setBounds(100,20,450,100);
jpanel.add(label2);
//显示名字信息
label3.setBounds(150,120,450,100);
//设置字体颜色
label3.setForeground(Color.yellow);
//添加按钮
jpanel=(JPanel)this.getContentPane();
jpanel.setLayout(null);
jbutton1.setBounds(new Rectangle(100,300,75,25));
jpanel.add(jbutton1);
jbutton1.addActionListener(new Action(this));
jbutton2.setBounds(new Rectangle(250,300,75,25));
jpanel.add(jbutton2);
jbutton2.addActionListener(new Stop(this));
}
/**
* 从控制台输入路径
*/
public static String InputPath(){
String str ="";
System.out.println("请输入TXT文本路径:");
Scanner sc= new Scanner(System.in);
str = sc.nextLine();
return str;
}
/**
* 读取文档数据
* @param filePath
* @return
*/
public static String ReadFile(String filePath){
String str = "";
try {
String encoding="GBK";
File file = new File(filePath);
if(file.isFile()&&file.exists()){
InputStreamReader reader =
new InputStreamReader(new FileInputStream(file),encoding);
BufferedReader bufferedReader = new BufferedReader(reader);
String lineTxt = "";
while((lineTxt = bufferedReader.readLine()) != null){
str+=lineTxt+";\n";
}
reader.close();
}else{
System.out.println("找不到指定的文件");
}
}catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
return str;
}
/**
* 将字符串转换为String数组
*/
public static String[] ChangeType(String str){
ArrayList<String> list=new ArrayList<String>();
String[] string = str.split(";");
return string;
}
/**
* main方法
* @param args
*/
public static void main(String args[]){
asd jframe=new asd();
jframe.setTitle("点名器");
jframe.setSize(450,400);
jframe.setVisible(true);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setResizable(false);
jframe.setLocationRelativeTo(null);
System.out.println();
}
/**
* 点击确定按钮后的方法
*/
public void chooseValue(ActionEvent e){
String str = "";
str = jtext.getText();
if(str != "" || str != null){
asd jframe = new asd(str);
jframe.setTitle("点名器");
jframe.setSize(450,400);
jframe.setVisible(true);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setResizable(false);
jframe.setLocationRelativeTo(null);
System.out.println(str);
}
}
/**
* 点击开始按钮后的方法
*/
public void actionRun(ActionEvent e){
if(flag){
//线程开始
t = new Thread(new Runnable(){
public void run(){//
while(count<=10000){
//文件路径
String strTest = strPath;
//开始读取数据
String strRead = ReadFile(strTest);
//将读取到的数据变为数组
String[] strc = ChangeType(strRead);
//获取随机的姓名
Random random = new Random();
int a = 0;
a = random.nextInt(strc.length-1);
String str = strc[a];
System.out.println("输出名字为:"+str);
label3.setFont(new java.awt.Font(str,1,60));
//设置名字标签的文字
label3.setText(str);
try{
t.sleep(20);//使线程休眠50毫秒
}catch(Exception e){
e.printStackTrace();
}
count+=1;//显示次数
}
}
});
t.start();
//设置字体颜色
jpanel.add(label3);
flag = false;
}
flag = false;
}
/**
* 点击暂停按钮后的方法
*/
public void stopRun(ActionEvent e){
if(!flag){
t.stop();
flag = true;
}
flag = true;
}
}
/**
*确定按键监控类
*/
class TextValue implements ActionListener {
private asd startJFrame;
TextValue(asd startJFrame) {
this.startJFrame = startJFrame;
}
public void actionPerformed(ActionEvent e) {
startJFrame.chooseValue(e);
startJFrame.setVisible(false);
}
}
/**
*开始按键监控类
*/
class Action implements ActionListener {
private asd jFrameIng;
Action(asd jFrameIng) {
this.jFrameIng = jFrameIng;
}
public void actionPerformed(ActionEvent e) {
jFrameIng.actionRun(e);
}
}
/**
*暂停按键监控类
*/
class Stop implements ActionListener {
private asd jFrameIng;
Stop(asd jFrameIng) {
this.jFrameIng = jFrameIng;
}
public void actionPerformed(ActionEvent e) {
jFrameIng.stopRun(e);
} }
测试类
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class RandomName {
JFrame rFrame = new JFrame("随机点名器"); //主面板
JLabel name = new JLabel();
JButton btn = new JButton("开始点名");//按钮
Random rd = new Random();
public void init()
{
JLabel jt = new JLabel("今天你很幸运:");//提示标签页面
jt.setHorizontalAlignment(SwingConstants.CENTER);//设置标签居中
jt.setFont(new java.awt.Font("随机点名器", 1, 35));//设置字体大小
name.setHorizontalAlignment(SwingConstants.CENTER);//设置名字显示的标签居中
btn.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String n = null;
try {
n = getRandomName();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//获取随机的姓名
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
name.setText(n);//设置name标签的文字
name.setFont(new java.awt.Font(n,1,100));//设置字体
name.setForeground(Color.blue);
}
});
//获取JFrame的面板
Container p = this.rFrame.getContentPane();
//设置布局方式,我采用的BordepLayout布局
p.setLayout(new BorderLayout(3,1));
//添加提示标签在北方
p.add(jt,BorderLayout.NORTH);
//添加姓名标签在中央
p.add(name,BorderLayout.CENTER);
//添加按钮在南方
p.add(btn,BorderLayout.SOUTH);
//调整大小,这个是java中无法设置标签的大小
rFrame.pack();
//设置窗体大小
rFrame.setSize(500, 500);
//设置可以显示
rFrame.setVisible(true);
}
public String getRandomName() throws IOException
{
//文件所在路径
String filePath="F:\\name.txt";
//读取
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"GBK"));
//创建动态字符串数组
ArrayList<String> list = new ArrayList<String>();
String line = null;
//对读取文件的内容进行处理,这里只进行输出
while ((line = br.readLine()) != null) {
// 将读取到的字符串放到字符串数组中
list.add(line);
// 一行一行地输出
// System.out.println(line);
}
br.close();// 关闭文件
String[] mingdan = (String[]) list.toArray(new String[0]);
// System.out.println(“length:”+mingdan.length);
int R = (int)(Math.random()*mingdan.length);
// System.out.println(“这次的幸运儿是:”+mingdan[Random]);
return mingdan[R];
}
public static void main(String[] args)
{
RandomName rn = new RandomName();
rn.init();
}}
这个Java程序创建了一个带有背景图片的GUI,用于实现随机点名功能。用户可以输入包含姓名的TXT文本路径,程序会从文件中读取姓名并随机选择。点名过程可以通过开始、暂停和确定按钮进行控制。程序还包含了读取文件、处理文本、显示姓名等核心功能。
848

被折叠的 条评论
为什么被折叠?



