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, "你输入的账号和密码不符,请重新输入");
???? ?
???? }??? ?
??
?}
}