事件机制实现的QQ登陆响应和计算器
第一个需要介绍的就是: .事件源
swing awt 图形界面
可以成为事件源对象的是:所有的图形界面组件对象。
你的动作发生在哪一个组件上,那么该组件对象就是事件源对象。
6.事件监听器方法
1.//动作监听器方法(输入框就是回车操作,按钮上就是鼠标单击)捕获事件源,输入输出
addActionListener(ActionListener al);
2.//鼠标监听器方法(捕获事件源上按下,释放,进入,离开)
( addMouseListener(MouseListener ml);
3.//鼠标移动监听器方法);(捕获事件源上的鼠标移动和鼠标拖动)
addMouseMotionListener(MouseMotionListener mml
4.//键盘监听器方法
addKeyListener(KeyListener kl);(捕获事件源上的键盘操作)
例如:1.事件源是jbulogin
2.找到监听器,创建类去继承接口,因为接口不能实例化
3.绑定事件处理类的对象
4.设置事件源的动作命令值jbulogin
两个框,使用参数传递,监听的构造方法
在事件机制学习中重要是实现算法功能,以及你的创造力,比如说计算器的实现,拆分运算符时,实在是绞尽脑汁,幸亏java的String功能强大如斯,还有百度大神的帮助,还有xg。成功完成时候,欣慰之余,也略感遗憾,毕竟只能实现两个数的加减乘除,再多估计还是要增加算法,再以后学习中,会使计算器的功能更加完善。
一下是QQ监听处理,计算器实现代码
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JOptionPane;
public class LoginListener implements ActionListener {
private JTextField d,e;
private JFrame st1;
public LoginListener(JFrame st1,JTextField d,JTextField e){
this.st1=st1;
this.d=d;
this.e=e;
}
//事件处理方法
public void actionPerformed(ActionEvent F){
//获取输入的账号和密码
String name =e.getText();
String pwd = d.getText();
//开始判断账号和密码是否都是administrator
if(name.equals("administrator") && pwd.equals("administrator")){
// 实例化一个JFrame类的对象
JFrame jf=new JFrame();
jf.setTitle("简单登录界面");// 设置标题
jf.setSize(200, 400);
jf.setResizable(false);
jf.setLocationRelativeTo(null);
// 设置关闭窗体的时候把程序退出
jf.setDefaultCloseOperation(3);
jf.setVisible(true);
st1.dispose();//关闭登录界面
}
else{
JOptionPane.showMessageDialog(st1,"你输入的账号和密码错误,请重新输入");
}
}
}
public class Caculator {
// 主函数程序入口
public static void main(String[] args) {
Caculator caculator = new Caculator();
caculator.initUI();
}
// 定义初始化计数器界面的方法
public void initUI() {
// 实例化一个窗体对象
JFrame jf = new JFrame();
// 设置窗体的标题
jf.setTitle("计算器");
// 设置窗体的属性值
jf.setSize(300, 400);// 设置计算器的大小
jf.setLocationRelativeTo(null);// 设置居中出现
jf.setResizable(false);// 设置窗体大小不可改变
jf.setDefaultCloseOperation(3);// 设置关闭
// 调用菜单创建方法
JMenuBar menuBar = createMenuBar();
// 设置窗体的菜单属性
jf.setJMenuBar(menuBar);
JPanel txtPanel = createTxtPanel();
JPanel centerPanel=createCenter();
jf.add(centerPanel,BorderLayout.CENTER);
jf.add(txtPanel,BorderLayout.NORTH);
addBackGroundImage(jf);
jf.setVisible(true);// 设置窗体可见
}
// 定义创建菜单栏的方法
public JMenuBar createMenuBar() {
// 实例化一个菜单栏对象
JMenuBar menuBar = new JMenuBar();
// 实例化3个菜单:编辑、查看、帮助
JMenu menu1 = new JMenu("编辑(E)");
JMenu menu2 = new JMenu("查看(V)");
JMenu menu3 = new JMenu("帮助(H)");
// 将菜单添加到菜单栏
menuBar.add(menu1);
menuBar.add(menu2);
menuBar.add(menu3);
// 返回创建好的菜单
return menuBar;
}
// 定义文本框显示面板
public JPanel createTxtPanel() {
// 实例化一个面板对象
JPanel txtPanel = new JPanel();
// 实例化一个文本框
text = new JTextField();
// 设置文本框的大小
text.setPreferredSize(new Dimension(200, 50));
txtPanel.add(text);
return txtPanel;
}
JTextField text;
//添加背景图片的方法,你要把背景图加到那里
public void addBackGroundImage(JFrame jf) {
ImageIcon backGroundImage = new ImageIcon("images/12.png");
JLabel backGround = new JLabel(backGroundImage);
backGround.setBounds(0, 0, backGroundImage.getIconWidth(),
backGroundImage.getIconHeight());
jf.getLayeredPane().add(backGround, new Integer(Integer.MIN_VALUE));//用到jf的地方
JPanel contentPanel = (JPanel) jf.getContentPane();
contentPanel.setOpaque(false);
}
public JPanel createNorth() {
JPanel northPanel = new JPanel();
JTextField t1 = new JTextField();
northPanel.setOpaque(false);
return northPanel;
}
public JPanel createCenter() {
JPanel centerPanel = new JPanel();
//centerPanel.setLayout(new FlowLayout());
centerPanel.setPreferredSize(new Dimension(220,0));
String[] label = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"+", "-", "*", "/", "=", ".","EC" };// 声明标签数组label1存放按钮上的标签
// 声明按钮数组存放16个按钮
ActionListener a=new CaListener(text);
for (int i = 0; i < label.length; i++)// 利用for循环把标签放在按钮上,使每个按钮添加事件监听器,在面板p1上添加上16个按钮
{
JButton b = new JButton(label[i]);
b.addActionListener(a);
//b.setPreferredSize(new Dimension(45,55));
centerPanel.add(b); // 分别将按钮添加到面板p1上
}
centerPanel.setOpaque(false);//设置窗口透明
return centerPanel;
}
}
public class CaListener implements ActionListener {
private JTextField jt1;//定义文本类的对象
private double number1,number2;//存储数值
private String str="";//存取运算符
public CaListener(JTextField jt1){//将文本框对象赋值给当前类的对象
this.jt1=jt1;
}
//处理事件机制
public void actionPerformed(ActionEvent e) {
String s1=e.getActionCommand();
if(s1.equals("EC")){
s1="0";
jt1.setText("");
}
if(jt1.getText().equals("0")){
jt1.setText(s1);
}
else{
jt1.setText(jt1.getText()+s1);
}
//if(s1.equals("+")||s1.equals("-")||s1.equals("*")||s1.equals("/")){
//number1=Integer.parseInt(jt1.getText());
//number2
//}
//if()
if (s1.equals("+") || s1.equals("*")) {
String recept;
recept=jt1.getText().replace(s1,"");
number1 = Double.parseDouble(recept);
str = s1;
jt1.setText("");
}
if( jt1.getText().contains("=")&&str.equals("+")){
String[] array=jt1.getText().split("=");
number2=Double.parseDouble(array[0]);
double count;
count=number1+number2;
str=""+count;
//System.out.println(count);
jt1.setText(str);
}
if( jt1.getText().contains("=")&&str.equals("*")){
String[] array=jt1.getText().split("=");
number2=Double.parseDouble(array[0]);
double count;
count=number1*number2;
str=""+count;
//System.out.println(count);
jt1.setText(str);
}
if( jt1.getText().contains("=")&&str.equals("*")){
String[] array=jt1.getText().split("=");
number2=Double.parseDouble(array[0]);
double count;
count=number1*number2;
str=""+count;
//System.out.println(count);
jt1.setText(str);
}
if( jt1.getText().contains("-")&& jt1.getText().contains("=")){
String[] array=jt1.getText().split("=");
System.out.println(array[0]);
String[] array1=array[0].split("-");
number1=Double.parseDouble(array1[0]);
number2=Double.parseDouble(array1[1]);
double count;
count=number1-number2;
str=""+count;
//System.out.println(count);
jt1.setText(str);
}
if( jt1.getText().contains("/")&& jt1.getText().contains("=")){
String[] array=jt1.getText().split("=");
System.out.println(array[0]);
String[] array1=array[0].split("/");
number1=Double.parseDouble(array1[0]);
number2=Double.parseDouble(array1[1]);
double count;
count=number1/number2;
str=""+count;
//System.out.println(count);
jt1.setText(str);
}
if( jt1.getText().contains("*")&& jt1.getText().contains("=")){
String[] array=jt1.getText().split("=");
System.out.println(array[0]);
String[] array1=array[0].split("*");
number1=Double.parseDouble(array1[0]);
number2=Double.parseDouble(array1[1]);
double count;
count=number1*number2;
str=""+count;
//System.out.println(count);
jt1.setText(str);
}
}
}