一.设计任务
摇奖 描述:从候选手机号码里随机选取号码显示在屏幕上作为获奖手机号。此题训练多线程操作。 描述 提示和要求: 提示和要求 ①候选号码可以保存在数组中,也可以保存在数据库中。 ②抽奖人点击开始按钮时,号码开始翻动,点击停止按钮时,显示的号码即为获奖号码。 ③为保证公平,应该使每个号码被选中的几率相同。
二.功能描述
用户界面简介:用户界面如图所示;界面包括一个顶层容器框架;两个按钮控件:开始和停止;一个编辑框控件;和一个标注为“抽奖机”的标签。
功能简介:点击开始按钮如图所示号码快速闪动,以至于不能看清号码。
然后点击停止按钮,选出幸运号码;如图:
点击消息框的确定按钮,继续抽奖!!!!!
三.各功能具体完成的功能
框架代码:
Final Liu form = new Liu();//Liu是一个自定义的框架类
form.setLocation(400,200);//设置框架位置坐标
form.setSize(455,300);//设置框架大小(长度和宽度)
form.setVisible(true);//设置框架是否可见
开始按钮代码:
JButton startButton = new JButton("开始");
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
str[0] = "b";
new Thread(new Runnable(){
public void run(){
new Main().string();
for(int i = 0;;++i)
{
if(str[0] == "a")
break;
form.getTextField().setText(new Main().string());
}
}}).start();
}
});
startButton.setFont(new Font("微软雅黑", Font.PLAIN, 24));
startButton.setBackground(Color.ORANGE);
startButton.setBounds(80, 165, 117, 46);
form.getContentPane().add(startButton);
开始按钮代码里面有一个内部线程new Thread(new Runnable)(){}).start(),这是我编程中的难点。
停止按钮代码:
JButton stopButton = new JButton("\u505C\u6B62");
stopButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
str[0] = "a";
String st = form.getTextField().getText();
st = "恭喜手机号为:" + st + "的用户获得百元大奖!!!!";
new JOptionPane().showMessageDialog(null, st);
}
});
stopButton.setFont(new Font("微软雅黑", Font.PLAIN, 24));
stopButton.setBackground(Color.magenta);
stopButton.setBounds(240, 165, 117, 46);
form.getContentPane().add(stopButton);
停止按钮代码里遇到线程结束问题非常头痛,通过多方面的查看资料,不断地调试,勉强解决,以后要加强线程的训练。
标签代码:
JLabel lblNewLabel = new JLabel("抽奖机");
lblNewLabel.setBackground(Color.MAGENTA);
lblNewLabel.setFont(new Font("微软雅黑", Font.PLAIN, 30));
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel.setBounds(150, 21, 136, 50);
getContentPane().add(lblNewLabel);
编辑框代码:
txtEdit = new JTextField();
txtEdit.setFont(new Font("微软雅黑", Font.PLAIN, 24));
txtEdit.setBounds(118, 90, 200, 50);
getContentPane().add(txtEdit);
txtEdit.setColumns(10);
本程序中编辑框读写号码是问题的关键,这也是我非常头痛的问题之一。
四.功能实现的流程
五.实验体会
编程遇到的困难:
编程过程中遇到很多困难,由于是第一次用可视化编程控件编程,所以对各个控件不太熟悉,走了很多弯路。由于对各个控件创建和设置都不能很好地把握,因此我运用eclipse的windowBuilder来编辑控件和设置属性等。其次就是对事件源,事件监听器,事件处理方法运用的不太熟练掌握的不太透彻。最大的困难就是创建线程和结束线程;尤其是结束线程可谓是绞尽脑汁。但是功夫不负有心人,在不断的坚持当中终于完成了任务。
经验总结:
以后要加强自己的编程训练,提高自己的编程能力。一定要敢想,敢写,敢做。在本次编程中使我更加深刻的了解了java面向对象的编程思想和编程方法。对java类有了更深刻的理解。对线程的应用更得心应手。
附录:
Liu.Java:
package java课程设计;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import java.awt.Font;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class Liu extends JFrame
{
public JTextField txtEdit;
public Liu()
{
super();
getContentPane().setBackground(Color.GREEN);
getContentPane().setForeground(Color.MAGENTA);
getContentPane().setFont(new Font("微软雅黑", Font.PLAIN, 30));
getContentPane().setLayout(null);
txtEdit = new JTextField();
txtEdit.setFont(new Font("微软雅黑", Font.PLAIN, 24));
txtEdit.setBounds(118, 90, 200, 50);
getContentPane().add(txtEdit);
txtEdit.setColumns(10);
JLabel lblNewLabel = new JLabel("抽奖机");
lblNewLabel.setBackground(Color.MAGENTA);
lblNewLabel.setFont(new Font("微软雅黑", Font.PLAIN, 30));
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel.setBounds(150, 21, 136, 50);
getContentPane().add(lblNewLabel);
}
public JTextField getTextField()
{
return txtEdit;
}
}
Main.java:
package java课程设计;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Main
{
String string()
{
String [] phone = {"14854268096","17864268097","12345678912","13864268096","18964268097","12345678912","14564268096","16764268097","12345678912","13864268096","13864268097","12345678912","13864268096","13864268097","12345678912","13864268096","13864268097","12345678912","13864268096","13864268097","12345678912"};
Random random = new Random();
int ran = random.nextInt(20);
return phone[ran];
}
public static void main(String [] args)
{
final String [] str = new String [5];
final Liu form = new Liu();
form.setLocation(400,200);
form.setSize(455,300);
form.setVisible(true);
JButton startButton = new JButton("开始");
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
str[0] = "b";
new Thread(new Runnable(){
public void run(){
new Main().string();
for(int i = 0;;++i)
{
if(str[0] == "a")
break;
form.getTextField().setText(new Main().string());
}
}}).start();
}
});
startButton.setFont(new Font("微软雅黑", Font.PLAIN, 24));
startButton.setBackground(Color.ORANGE);
startButton.setBounds(80, 165, 117, 46);
form.getContentPane().add(startButton);
JButton stopButton = new JButton("\u505C\u6B62");
stopButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
str[0] = "a";
String st = form.getTextField().getText();
st = "恭喜手机号为:" + st + "的用户获得百元大奖!!!!";
new JOptionPane().showMessageDialog(null, st);
}
});
stopButton.setFont(new Font("微软雅黑", Font.PLAIN, 24));
stopButton.setBackground(Color.magenta);
stopButton.setBounds(240, 165, 117, 46);
form.getContentPane().add(stopButton);
}
}