一、GUI基础
GUI全称Graphical User Interface,即图形用户界面,是指采用图形方式显示计算机操作界面的应用程序。
Java中的GUI开发采用的是Swing组件库,Swing是一种跨平台的图形用户界面(GUI)工具包,它是在Java SE的基础上开发的。
在Java中,我们可以通过继承JFrame类或者使用JFrame对象来创建一个窗口。
二、实现一个简单的猜数字游戏
接下来,我们将使用Java Swing组件库,实现一个简单的猜数字游戏。
首先,我们需要创建一个Java项目,并在项目中创建两个类,一个类用于实现GUI界面,一个类用于实现猜数字的逻辑。
LoginUI类用于实现GUI界面,代码如下:
import java.awt.*;
import javax.swing.*;
public class LoginUI{
// 初始化UI界面的方法
public void initUI(){
JFrame jf = new JFrame ();
jf.setTitle ("登录界面");
jf.setSize (500, 400);
jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
FlowLayout flow = new FlowLayout ();
jf.setLayout (flow);
JTextField in = new JTextField ();
JTextField out = new JTextField ();
JButton btn = new JButton ("确定");
// 设置输入框的尺寸
Dimension dim = new Dimension (180, 60);
in.setPreferredSize (dim);
out.setPreferredSize (dim);
// 限制out输入框不能输入字符
out.setEnabled (false);
// 将组件添加到窗体上
jf.add (in);
jf.add (btn);
jf.add (out);
jf.setVisible (true);
// btnl 看作自己实现的监听器
BtnListen btnl = new BtnListen ();
// 按钮与这个监听器绑定
btn.addActionListener (btnl);
// 将界面上的输入框对象 传给监听器对象 方便按钮被点击之后调用的方法中 使用 输入框不出错
btnl.in2 = in;
btnl.out2 = out;
}
// 程序入口
public static void main(String[] args){
LoginUI loginUI = new LoginUI ();
loginUI.initUI ();
}
}
上述代码中,我们创建了一个LoginUI类,该类中有一个initUI()方法用于初始化GUI界面。
在initUI()方法中,我们首先创建了一个JFrame对象,设置了该对象的一些属性,比如标题、大小等。
然后,我们使用FlowLayout布局管理器,将三个组件(一个输入框、一个按钮和一个输出框)添加到了JFrame对象上,并设置了输入框和输出框的尺寸
接下来,我们创建了一个BtnListen对象,并将其绑定到按钮上:
// btnl 看作自己实现的监听器
BtnListen btnl = new BtnListen();
// 按钮与这个监听器绑定
btn.addActionListener(btnl);
// 将界面上的输入框对象传给监听器对象方便调用
btnl.in2 = in;
btnl.out2 = out;
在创建BtnListen对象后,我们将其绑定到按钮上,使按钮与监听器建立关联。当用户点击按钮时,按钮会向绑定的监听器发送事件,监听器会执行actionPerformed(ActionEvent e)方法中的逻辑。
在actionPerformed
方法中,首先判断是否已经初始化num
的值,如果没有,则调用Random
类生成0-100之间的随机整数作为num
的值。
接着,通过in2.getText()
方法获取输入框中的文本内容,并进行长度和是否全为数字的合法性检查。如果不合法,将输出框中的文本设置为相应的错误提示,并使用return
语句退出方法。
如果输入的值合法,则通过Integer.parseInt
方法将文本内容转换成整数,与生成的num
值进行比较。如果相等,则将输出框中的文本设置为"炸弹爆炸了 已重置炸弹~",并将num
、min
和max
的值重置为0、0和100。此外,将输入框中的文本设置为"请继续输入您要猜的数"。
如果输入的值不等于num
,则根据大小关系更新min
或max
的值,并将输出框中的文本设置为"没有猜到炸弹"加上min
和max
的值。
最后,BtnListen
类实现了ActionListener
接口,将输入框和输出框的对象传递给BtnListen
对象,并将按钮与BtnListen
对象绑定。这样,当按钮被点击时,actionPerformed
方法将被调用,完成相应的操作。
public class BtnListen implements ActionListener{
JTextField in2;
JTextField out2;
int num = 0;
Random ran = new Random ();
int max = 100;
int min = 0;
// 子类直接写一个与父类一模一样的方法 相当于是重构方法
public void actionPerformed(ActionEvent e){
System.out.println ("按钮被点击了");
if(num == 0){
// 初始化num 随机0-100之间的数
num = ran.nextInt (100) + 1;// (0-99)
}
// 输入框获取文本
String inText = in2.getText ();
// ASCII码 数字 符号 StString 字母 控制符(0~127)
if(inText.length () > 2){
out2.setText ("输入长度不合法~");
return;
}
for(int i = 0; i < inText.length (); i++){
char c1 = inText.charAt (i);
if(c1 < '0' || c1 > '9'){
out2.setText ("输入字符带有非数字~");
return;
}
}
// 将文本转为数值
int inNum = Integer.parseInt (inText);
if(inNum >= max || inNum <= min){
out2.setText ("请输入正确范围内的数值:" + min + "~" + max);
return;
}
if(inNum == num){
out2.setText ("炸弹爆炸了 已重置炸弹~");
num = 0;
min = 0;
max = 100;
in2.setText ("请继续输入您要猜的数");
} else{
if(inNum > num){
max = inNum;
} else if(inNum < num){
min = inNum;
}
out2.setText ("没有猜到炸弹" + min + "~" + max);
}
}
}