QQ登陆按钮事件
实现QQlogin界面点登陆,弹出新界面时,旧界面自动关闭
解题思路:
把JFrame传到监听器里面;
把jf.setVisible(false);/或者jf.dispose();把原窗口消掉;
遇到大问题:
1.传参的问题!!!!! 这个问题很严重啊!
这段可以忽略,纯粹心理历程(【这个问题困扰了我很久很久很久很久~ (我认为);
没想法的时候,向大神们请教,我按照他们说的去做,发现怎么做怎么错;
那天晚上没能解决到这个问题,到了另外一天到公司让大神看代码才发现自己犯了个很严重的错误~
我没有意识到的很严重的错误~ (这问题,没人教我真不懂~)
估计我是上传参课的时候太看小他了~导致犯这么大错。 太悲催了,太悲催了~
被问题困扰的感觉太难过了!】}
2.有思路,可是不知道怎么实现~
**问题的根源+解决方法:
1.【 //给事件源添加一个监听器方法,同时绑定事件处理类的对象ff
jb3.addActionListener(ff);
//给事件源添加一个监听器方法,同时绑定事件处理类的对象ll
jb3.addActionListener(ll); 】//错误代码
从这里我发现我还没能掌握到监听器的方法,只能给事件源添加一个监听器方法,绑定的对象只有一个!
因为用构造方法传参的时候,用一个构造器把全部参数都传进去啊!!我就分开了2个~ 必错无疑了~
我还以为是监听器的问题~ 当然,一开始是真的有问题~
一开始把QQlogin传进去了,现在想,应该没问题~ 只是自己不懂~
然后很疑惑的时候,就随便敲,随便敲,希望自己能中狗屎运~
后来发现,在这个严密的计算机语言中,乱搞是不行的,扎实的基础十分重要!
下层物质基础决定上层建筑嘛~ (不知道说错没有)
2.动手能力不足,跟计算机还混的不熟!
解决方法:还是得多敲,没有捷径~只有跟他混多了才能熟嘛~ 多敲!
问题还是有很多的~因为最近功课一直拉下了~ 有些问题都忘了~
一种占主导地位的感觉: 我不是一只小菜鸟,是一只大大大菜鸟~ aweful feeling!!!
现在很多问题还是自己解决不了,都要用别人的思路。
要学会独立解决问题啊! 不然一直都是菜鸟
附上代码:
/**********入口主函数************/
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
//import javax.swing.JRootPane;
/**
* 创建一个简单的QQ登录界面
* @author Administrator
*
*/
public class QQlogin {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
QQlogin lo = new QQlogin();
lo.showFrame();
//讲登陆界面对象通过构造方法传入到ButtonAction类中
}
//声明一个全局的对象名
private ButtonAction ll = null ;
public JFrame jf;
//显示一个窗体界面的方法
public void showFrame(){
//设置一个窗体对象
jf = new JFrame();
//设置一个 标题
jf.setTitle("QQ登陆界面");
//设置大小
jf.setSize(380, 300);
//设置个起始位置,桌面中央
jf.setLocationRelativeTo(null);
//设置关闭
jf.setDefaultCloseOperation(2);
//设置能否改变窗体大小
jf.setResizable(false);
//设置窗体布局,边框布局
jf.setLayout(new BorderLayout());
/******窗体北边******/
JPanel jp1 = NorthPanel();
//把标签添加到窗体北边
jf.add(jp1,BorderLayout.NORTH);
/******窗体西边******/
JPanel jp2 = WestPanel();
//把标签添加到窗体北边
jf.add(jp2,BorderLayout.WEST);
/******窗体中间******/
JPanel jp3 = CenterPanel();
//把标签添加到窗体中间
jf.add(jp3,BorderLayout.CENTER);
/******窗体南边******/
JPanel jp4 = SouthPanel();
//把标签添加到窗体南边
jf.add(jp4,BorderLayout.SOUTH);
//设置背景,让面板透明
BackGroud(jf);
jp1.setOpaque(false);
jp2.setOpaque(false);
jp3.setOpaque(false);
jf.setVisible(true);
}
//**************设置背景****************************/
public void BackGroud(JFrame jf){
//实例化背景图片
ImageIcon img = new ImageIcon("images/4.jpg");//加载背景图片
JLabel image1 = new JLabel(img);
//添加图片至Frame的第二层
jf.getLayeredPane().add(image1, new Integer(Integer.MIN_VALUE));
//把标签的大小位置设置为图片刚好填充整个面
image1.setBounds(0,0,380, 300);
//image1.setBounds(0,0,img.getIconWidth(), img.getIconHeight());
//获取frame的最上层面板为了设置其背景颜色\ Container f4得到窗口放panel的一层
//设置第一层面板对象
Container f4=jf.getContentPane();
//设置透明,强制转型
((JComponent) f4).setOpaque(false);//
}
/*****************窗体北边*************************/
public JPanel NorthPanel(){
//panel们默认布局为流布局,居中。
JPanel jp1 = new JPanel();
jp1.setPreferredSize(new Dimension(380,130));
return jp1;
}
/*****************窗体西边*************************/
public JPanel WestPanel(){
//实例化一个面板
JPanel jp2 = new JPanel();
//设置面板布局
jp2.setLayout(new FlowLayout(FlowLayout.CENTER,15,5));
//实例化swing包下ImageIcon类对象
ImageIcon icon2 = new ImageIcon("images/2.jpg");
//实例化一个标签对象
JLabel label2 = new JLabel(icon2);
//把标签加到面板上
jp2.add(label2);
return jp2;
}
/*****************窗体中间*************************/
public JPanel CenterPanel(){
//实例化一个面板
JPanel jp3 = new JPanel();
//设置面板布局
jp3.setLayout(new FlowLayout(FlowLayout.LEFT,4,5));
//设置下拉框
JComboBox<String> combo = new JComboBox<String>();
//设置可编辑
combo.setEditable(true);
combo.setPreferredSize(new Dimension(175,22));
//添加到面板上
jp3.add(combo);
//添加“注册账号”按钮
JLabel jb1 = new JLabel("注册账号");
//jb1.setOpaque(false);
jp3.add(jb1);
//添加“输入密码”输入框
JPasswordField pass = new JPasswordField();
pass.setPreferredSize(new Dimension(175,22));
//添加到面板上
jp3.add(pass);
//添加“找回密码”按钮
JLabel jb2 = new JLabel("找回密码");
jp3.add(jb2);
//加入选择框
JCheckBox jc1 = new JCheckBox("记住密码");
jc1.setOpaque(false);
JCheckBox jc2 = new JCheckBox("自动登陆");
jc2.setOpaque(false);
jp3.add(jc1);
jp3.add(jc2);
//同时将账号和密码输入框对象通过构造方法传入到LoginListener类中
ll = new ButtonAction(combo,pass,jf);
return jp3;
}
/*****************窗体南边*************************/
public JPanel SouthPanel(){
//实例化一个面板
JPanel jp4 = new JPanel();
//设置面板布局
jp4.setLayout(new FlowLayout(FlowLayout.CENTER,1,13));
//实例化一个按钮对象
jp4.setBackground(new Color(203,139,95));
JButton jb3 = new JButton("登 录");
//ButtonAction ff = new ButtonAction(jf);
//给登陆按钮添加一个监听器
jp4.setPreferredSize(new Dimension(0,48));
jb3.setPreferredSize(new Dimension(140,30));
jp4.add(jb3);
//给事件源添加一个监听器方法,同时绑定事件处理类的对象ff
jb3.addActionListener(ll);
//给事件源添加一个监听器方法,同时绑定事件处理类的对象ll
// jb3.addActionListener(ll);
return jp4;
}
}
/***************定义登陆按钮监听器************************/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
//import javax.swing.JComponent;
public class ButtonAction implements ActionListener {
public JFrame jf;
private JComboBox combo;
private JPasswordField pass;
public QQlogin lo;
// public ButtonAction(JFrame jf){
// this.jf=jf;
// }
public ButtonAction(JComboBox combo,JPasswordField pass,JFrame jf){
this.combo = combo;
this.pass = pass;
this.jf=jf;
}
@Override
public void actionPerformed( ActionEvent e) {
System.out.println("你点击了"+e.getActionCommand()+"按钮");
//获取账号,密码信息
String name = (String)combo.getSelectedItem();
String passworld = new String(pass.getPassword());
//判断账号密码是否一致;
if(name.equals("912332548")&&passworld.equals("1234")){
//Window jf = null;
jf.dispose();
//实例化一个简单界面
JFrame jf1 = new JFrame();
jf1.setSize(300,500);
jf1.setTitle("扣扣扣鼻屎");
jf1.setResizable(true);
jf1.setDefaultCloseOperation(3);
jf1.setLocationRelativeTo(null);
jf1.dispose();
jf1.setVisible(true);
}
else{
//账号密码不一致
//弹出一个消息提醒窗口
JOptionPane.showMessageDialog(null, "你输入的账号和密码不符,请重新输入");
}
}
}