这篇文章讲解一下如何实现登录界面上按钮的响应功能。
1.
所需的Java源代码开发包 源代码库
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
2.以数字炸弹游戏为例:
3.
一。
1.先创建一个界面类NumBomUI,在创建一个showUI方法,最后创建一个程序入口,在程序入口中创建一个这个类NumBomUI的对象并调用方法showUI
2.创建一个窗体Frame,完成窗体上的组件,并把组件加载到窗体上。
代码如下:
public class NumBomUI {
public void showUI(){
//窗体
JFrame jf = new JFrame();
jf.setTitle ("登录界面 login interface 作者:nhq");//标题
jf.setSize (400, 450);//大小
jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);// 关闭按钮
FlowLayout flowLayout = new FlowLayout ();// 创建一个布局对象
jf.setLayout (flowLayout);
//标题
JLabel tilJla = new JLabel("数字炸弹");
//字体
Font font = new Font ("黑体",Font.BOLD,80);
tilJla.setFont(font);
//标签
JLabel numJla = new JLabel("请输入你猜的数字");
//输入框
JTextField numJte = new JTextField(30);
//按钮
JButton numBtn = new JButton("确定");
//添加到窗体上
jf.add(tilJla);
jf.add(numJla);
jf.add(numJte);
jf.add(numBtn);
//可视化
jf.setVisible (true);
}
public static void main(String[] args){
NumBomUI numBomUI = new NumBomUI();
numBomUI.showUI();
}
}
二。
在开发界面上创建BtnAction对象btnAction,并注册给按钮对象btn。
BtnAction btnAction = new BtnAction();
btn.addActionListener(btnAction);
三。
1.自行创建一个类BtnAction实现ActionListener。
2.在这个类中重写ActionListener中的方法actionPerformed方法。
3.运用二中的操作。
代码如下:
public class BtnAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
}
}
四。
在方法中编写数字炸弹的代码,并在此类中编写封装的窗体代码。
代码如下:
JTextField numJtf2;
// 游戏需要的数据
int bomNum = -1;
int min = -1;
int max = 100;
// 随机数工具类
Random random = new Random();
int count = 1;
public void actionPerformed(ActionEvent e) {
System.out.println("按钮被点击了");
//获取输入的数据
String numText = numJtf2.getText();
System.out.println(numText);
//初始化数据
if (bomNum == -1) {
bomNum = random.nextInt(100);
System.out.println("炸弹已经生成");
jf.setVisible(false);
jf = new JFrame();
}
//将数字文本 变为整数型变量
int numInput = Integer.parseInt(numText);
//判断输入数据是否符合要求
if (numInput <= min || numInput >= max) {
System.out.println("输入的数字不在当前范围(" + min + "-" + max + ")内。");
msgFrame("输入的数字不在当前范围(" + min + "-" + max + ")内。");
return;
}
//判断输入数据与数字炸弹的大小
if (numInput == bomNum) {
System.out.println("恭喜你猜中了,炸弹是" + bomNum);
msgFrame("恭喜你猜中了,炸弹是" + bomNum);
bomNum = -1;
min = -1;
max = 100;
count = 0;
numJtf2.setText("");
} else if (numInput < bomNum) {
System.out.println("猜小了");
msgFrame("猜小了");
min = numInput;
} else {
System.out.println("猜大了");
msgFrame("猜大了");
max = numInput;
}
}
JFrame jf = new JFrame();(只进行一个窗体的运行)
// 封装
public void msgFrame(String msg) {
jf.setTitle("显示信息");
jf.setSize(400, 380);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);(注意此处的区别)
FlowLayout flowLayout = new FlowLayout();
jf.setLayout(flowLayout);
JLabel jLabel = new JLabel(count + ":" + msg);
count++;
Dimension dim = new Dimension(300, 40);
jLabel.setPreferredSize(dim);
Font font = new Font("黑体", Font.BOLD, 30);
jLabel.setFont(font);
jf.add(jLabel);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
}
五
将按钮对象的地址传递给监测器中的对象numJtf2
代码如下:
tnAction.numJtf2=numJte;
六.
进行各部分代码和类的整合。
代码如下:
package nhq0816;
import java.awt.*;
import javax.swing.*;
public class NumBomUI {
public void showUI(){
//窗体
JFrame jf = new JFrame();
jf.setTitle ("登录界面 login interface 作者:nhq");//标题
jf.setSize (400, 450);//大小
jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);// 关闭按钮
FlowLayout flowLayout = new FlowLayout ();// 创建一个布局对象
jf.setLayout (flowLayout);
//标题
JLabel tilJla = new JLabel("数字炸弹");
//字体
Font font = new Font ("黑体",Font.BOLD,80);
tilJla.setFont(font);
//标签
JLabel numJla = new JLabel("请输入你猜的数字");
//输入框
JTextField numJte = new JTextField(30);
//按钮
JButton numBtn = new JButton("确定");
//添加到窗体上
jf.add(tilJla);
jf.add(numJla);
jf.add(numJte);
jf.add(numBtn);
//可视化
jf.setVisible (true);
//在开发界面上创建BtnAction对象btnAction,并注册给按钮对象btn。(实现只要按动按钮就可以执行BtnAction中的代码)
BtnAction btnAction= new BtnAction ();
numBtn.addActionListener (btnAction);//(实现只要按动按钮就可以执行BtnAction中的代码)
// 传递对象的地址 给 监测器中的对象numJtf2
btnAction.numJtf2=numJte;
}
public static void main(String[] args){
NumBomUI numBomUI = new NumBomUI();
numBomUI.showUI();
}
}
package nhq0816;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class BtnAction implements ActionListener {
JTextField numJtf2;
// 游戏需要的数据
int bomNum = -1;
int min = -1;
int max = 100;
// 随机数工具类
Random random = new Random();
int count = 1;
public void actionPerformed(ActionEvent e) {
System.out.println("按钮被点击了");
//获取输入的数据
String numText = numJtf2.getText();
System.out.println(numText);
//
if (bomNum == -1) {
bomNum = random.nextInt(100);
System.out.println("炸弹已经生成");
jf.setVisible(false);
jf = new JFrame();
}
//将数字文本 变为整数型变量
int numInput = Integer.parseInt(numText);
if (numInput <= min || numInput >= max) {
System.out.println("输入的数字不在当前范围(" + min + "-" + max + ")内。");
msgFrame("输入的数字不在当前范围(" + min + "-" + max + ")内。");
return;
}
if (numInput == bomNum) {
System.out.println("恭喜你猜中了,炸弹是" + bomNum);
msgFrame("恭喜你猜中了,炸弹是" + bomNum);
bomNum = -1;
min = -1;
max = 100;
count = 0;
numJtf2.setText("");
} else if (numInput < bomNum) {
System.out.println("猜小了");
msgFrame("猜小了");
min = numInput;
} else {
System.out.println("猜大了");
msgFrame("猜大了");
max = numInput;
}
}
JFrame jf = new JFrame();
// 封装
public void msgFrame(String msg) {
jf.setTitle("显示信息");
jf.setSize(400, 380);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
FlowLayout flowLayout = new FlowLayout();
jf.setLayout(flowLayout);
JLabel jLabel = new JLabel(count + ":" + msg);
count++;
Dimension dim = new Dimension(300, 40);
jLabel.setPreferredSize(dim);
Font font = new Font("黑体", Font.BOLD, 30);
jLabel.setFont(font);
jf.add(jLabel);
jf.setLocationRelativeTo(null);
jf.setVisible(true);
}
}
以上就是以数字炸弹为例的Java动作监听器的大概步骤。