实现QQ登录界面,密码框出现提示文字的效果

**


说明:这只是我个人的方法,方法可能不唯一,仅供参考哦,复杂了点(嘻嘻嘻~)。

思路:通过监听,对普通文本框和密码框进行切换来实现。

具体思路:

  1. 用一个面板来盛放两个组件(不是两个都放进去),初始化时,将普通文本框加入到面板中。

  2. 然后添加对普通文本框实现得到焦点的监听(监听是否失去光标,即是否被选中),监听方法有两个抽象方法,这里只实现得到焦点(光标)的方法,(因为得到光标意味着用户将要输入密码,当然应该切换到密文形式,注意:另外一个方法要写空实现)。

  3. 紧接着对密码框进行失去焦点监听(原理同上),注意:这里的切换是有条件的,即当密码框里面的内容为空时,才能进行切换,否则不进行切换。

  4. 最后记得将面板加入到相应的容器的对应的位置上面去。

    下面我将其封装为一个方法,代码如下:

    注释:这里的panel,text_password,field_password的声明放在方法的外面,设为全局变量


publicvoid setField_password(){
   text_password =new JTextField("密码");
   field_password =newJPasswordField(30);
   panel =new JPanel(new BorderLayout());
   panel.setBounds(140,225,185,30);
   text_password.setPreferredSize(newDimension(185,30));
   field_password.setPreferredSize(newDimension(185,30));
   field_password.setSize(185,30);
   text_password.setSize(185,30);
   field_password.setFont(new Font(null,Font.BOLD,25));
   text_password.setFont(new Font(null,Font.BOLD,25));
   //为输入框设置文本样式
   field_password.setFont(font);
   text_password.setFont(font);
   //为提示文字修改颜色
   field_password.setForeground(new Color(126,126,126));
   text_password.setForeground(newColor(126,126,126));
   //将输入框做成圆角矩形
   field_password.setBorder(BorderFactory.createLineBorder(newColor(211,207,208), 1, true));
   text_password.setBorder(BorderFactory.createLineBorder(newColor(211,207,208), 1, true));
       panel.add(text_password, BorderLayout.SOUTH);
       //为文本输入框加入监听功能因为刚开始添加的是文本输入框
       text_password.addFocusListener(new FocusListener() {
           publicvoid focusGained(FocusEvent e) {//光标进来了
           //改变输入框的样式
             field_password.setFont(font2);
             field_password.setForeground(Color.black);
             field_password.setBorder(new LineBorder(newColor(21,131,221)));
           //为密码框添加内部类鼠标监听(鼠标经过事件)  当转换为密码框的时候,自动获取到焦点
             field_password.addMouseListener(newMouseAdapter(){ 
             publicvoid mouseEntered(MouseEvent e)
              {
                 field_password.requestFocus();
              }
             });
             //移除密码输入框,添加文本输入框,切记面板要重画
             panel.remove(text_password);
             panel.add(field_password, BorderLayout.SOUTH);
             panel.updateUI();
             panel.repaint();
           }
          publicvoid focusLost(FocusEvent arg0) {//光标不在此处  接口必须是实现全部方法
          }
       });
       //为密码框添加监听功能,实现文本框失去焦点时,文本框到密码框的替换

       //注意:因为此时输入框已从文本框替换成密码框,不能再对文本框进行监听
       field_password.addFocusListener(new FocusListener() { 
       publicvoid focusLost(FocusEvent e) {//光标不在这里了
        //这里的if判断很重要,不能直接写field_password.getText().equals("")来判断密码框为空,
        if(new String(field_password.getPassword()).length()== 0){
           System.out.println("123");
           panel.remove(field_password);
                   panel.add(text_password, BorderLayout.SOUTH);
                   panel.updateUI();
                   panel.repaint();
           }
          }
          publicvoid focusGained(FocusEvent arg0) {//接口必须是实现全部方法
         }
       });
   this.add(panel);
   }
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值