天天看點

java 鍵盤事件 KeyListener

/*

 * KeyListener:文本框内内容長度超過10 達到第11個時(最大長度10) 焦點自動跳到下個文本框

 * 控制台會自動輸出所按字元的ASCII

 */



import java.awt.Component;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;



import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;



public class KeyEventTest3 extends JFrame implements KeyListener {

 

 JTextField textUser;

 JTextField textID;

 JTextField textPW;

 

 public KeyEventTest3() {

 JLabel labelUser = new JLabel("使用者名",JLabel.CENTER);

 JLabel labelID = new JLabel("身份證号",JLabel.CENTER);

 JLabel labelPW = new JLabel("密碼",JLabel.CENTER);

 

 textUser = new JTextField(10);

 textID = new JTextField(20);

 textPW = new JPasswordField(25);

 textUser.requestFocusInWindow();//textUser文本框獲得焦點

 

 labelID.setFont(new Font("Dialog", Font.PLAIN, 20));

 labelPW.setFont(new Font("Dialog", Font.PLAIN, 20));

 labelUser.setFont(new Font("Dialog", Font.PLAIN, 20));

 

 setLayout(new GridLayout(3, 2));

 add(labelUser);

 add(textUser);

 add(labelID);

 add(textID);

 add(labelPW);

 add(textPW);

 

 textUser.addKeyListener(this);

 textPW.addKeyListener(this);

 textID.addKeyListener(this);

 

 addKeyListener(this);

 }



 @Override

 public void keyTyped(KeyEvent e) {

 /*char c=e.getKeyChar();//得到輸入的字元

 JTextField j=(JTextField)

 if((JTextField)(e))*/

 }



 @Override

 public void keyPressed(KeyEvent e) {

 JTextField component=(JTextField)e.getSource();
 

 

 if(component==textUser) {

 if(textUser.getText().length()>9) {//傳回文本插入符的位置

 textID.requestFocusInWindow();//下一個textID框請求獲得焦點

 textID.setCaretPosition(0);//下一個ID框滑鼠位置在文本框首位
 

 }

 }

 

 if(component==textID) {

 if(textID.getText().length()>9) {

 textPW.requestFocusInWindow();

 textPW.setCaretPosition(0);

 }

 }

 

 if(component==textPW) {

 if(textPW.getText().length()>9) {

 textPW.transferFocus();//表示密碼的文本框獲得焦點   注意!!!!!

 }

 }

 

 //字元串長度大于10的部分自動舍去 每次時間的最後處理    

 //最後一個數字還是會留下來 需要主動删除處理才能解決 改了好久沒解決 若有誰能解決 望告知

 if(textUser.getText().length()>9) {

 textUser.setText(textUser.getText().substring(0, 10));

 }

 if(textID.getText().length()>9) {

 textID.setText(textID.getText().substring(0, 10));

 }

 if(textPW.getText().length()>9) {

 textPW.setText(textPW.getText().substring(0, 10));

 }
 



 }



 @Override

 public void keyReleased(KeyEvent e) {

 System.out.println(e.getKeyChar()+" "+e.getKeyCode());//放下時顯示所按鍵的ascii

 //發現鍵盤上大小寫a A都是65  而小鍵盤0是96

 }



 public static void main(String[] args) {

 KeyEventTest3 kt = new KeyEventTest3();

 kt.setBounds(400, 200, 500, 300);

 kt.setVisible(true);

 kt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

 }



}