运行界面
布局:
整个窗口用的边界布局
分为上、中、下三部分上层为JTextField控件
中层JLabel控件
下层为网格布局
为一行三列,每一个空放一个Button
代码如下:
package com.gpf.crossword.ui;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.gpf.crossword.biz.GameManager;
/**
* 这是一个实现猜字游戏的窗口
*
* @author 朝九晚十
*
*/
public class GameFrame extends JFrame {
GameManager gameManager = new GameManager();
JLabel label1;
JTextField txt1;
JButton button1;// 按钮“猜 ”
JButton button2;// 按钮“重新来过”
JButton button3;// 按钮“退出游戏”
/*
* 构造方法
*/
public GameFrame() {
// 程序一运行先产生一个随机数
gameManager.Again();
// 设置Container
Container con = getContentPane();
/*
* 设置边界布局
*/
con.setLayout(new BorderLayout());
// 上
JPanel jp1 = new JPanel();
jp1.setLayout(new GridLayout(1, 1));//设置布局
txt1 = new JTextField();
jp1.add(txt1);
// 中
JPanel jp2 = new JPanel();
jp2.setLayout(new BorderLayout());
label1 = new JLabel("请输入一个1000以内的整数");
jp2.add(label1, BorderLayout.CENTER);//添加监听
// 下
JPanel jp3 = new JPanel();
jp3.setLayout(new GridLayout(1, 3));//设置布局
button1 = new JButton("猜");
//添加监听
button1.addActionListener(new Monitor1(txt1, label1));
button2 = new JButton("重新来过");
//添加监听
button2.addActionListener(new Monitor2(txt1, label1));
button3 = new JButton("退出游戏");
//添加监听
button3.addActionListener(new Monitor3());
jp3.add(button1);
jp3.add(button2);
jp3.add(button3);
con.add(jp1, BorderLayout.NORTH);//上
con.add(jp2, BorderLayout.CENTER);//中
con.add(jp3, BorderLayout.SOUTH);//下
/*
* 回车监听事件
* 键盘点击回车,实现和点击“猜”按钮一样的功能
*/
txt1.addActionListener(new Monitor1(txt1, label1));
/*
* 窗体设置
*/
setTitle("猜字游戏");// 设置窗口的标题
setSize(300, 250);// 设置大小
setLocation(750, 400);// 设置窗口出现的位置
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
txt1.requestFocus();// txt1获取光标
setVisible(true);// 可视化设置
}
// 监听按钮一:猜
class Monitor1 implements ActionListener {
JTextField num = new JTextField();
JLabel label = new JLabel();
// 构造函数
Monitor1(JTextField num, JLabel label) {
this.num = num;
this.label = label;
}
@Override
public void actionPerformed(ActionEvent e) {
int number = Integer.parseInt(num.getText());
int flag;
flag = gameManager.Guess(number);
if (flag == 1) {
label.setText(number + "\t这个数太大了");
} else if (flag == -1) {
label.setText(number + "\t这个数太小了");
} else if (flag == 0) {
label.setText("恭喜你,猜对了!");
}
num.setText("");
num.requestFocus();
}
}
/*
* 监听按钮二:重新开始
*/
class Monitor2 implements ActionListener {
JTextField num = new JTextField();
JLabel label = new JLabel();
// 构造函数
Monitor2(JTextField num, JLabel label) {
this.num = num;
this.label = label;
}
@Override
public void actionPerformed(ActionEvent e) {
gameManager.Again();
label.setText("请再次输入一个1000以内的整数!");
num.setText("");
}
}
// 监听按钮三:退出游戏
class Monitor3 implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
// 主函数
public static void main(String[] args) {
GameFrame Frame = new GameFrame();
}
}
package com.gpf.crossword.biz;
import java.util.Random;
/**
* 这是一个产生随机数和比较猜的对不对的函数
*
* @author 朝九晚十
*
*/
public class GameManager {
private int number = 0;// 随机数
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
/**
* 猜数
*
* @param number玩家猜的数
* @return大了返回1,小了返回-1,相等返回0
*/
public int Guess(int number) {
if (number > this.number) {
// System.out.println("大了");
return 1;
} else if (number < this.number) {
// System.out.println("小了");
return -1;
} else {
// System.out.println("相等");
return 0;
}
}
// 再来一次
public void Again() {
Random random = new Random();
// 产生一个1-1000的一个随机数
int num = random.nextInt(999) + 1;
setNumber(num);
System.out.print(num + "-");
}
}
结束语:
刚学的GUI,随便写了写,写完后发现写的很不规范,请大神们看一看,有什么需要修改的地方,比如规范什么的,评论一下,欢迎大神提意见!