⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard.java

📁 Typing fingers Typing programme
💻 JAVA
字号:
import javax.swing.*;
import java.util.*;
import java.awt.*;
import javax.swing.border.*;

/** This class display a keyboard and also highlight a given character.*/
class Keyboard extends JPanel{
	String rows[][]={
				{"1.00`~","1.001!","1.002@","1.003#","1.004$","1.005%","1.006^","1.007&","1.008*","1.009(","1.000)","1.00-_","1.00=+","2.60Back"},
				{"1.50Tab","1.00Q","1.00W","1.00E","1.00R","1.00T","1.00Y","1.00U","1.00I","1.00O","1.00P","1.00[{","1.00]}","2.10\\|"},
				{"2.00CAPS","1.00A","1.00S","1.00D","1.00F","1.00G","1.00H","1.00J","1.00K","1.00L","1.00;:","1.00'\"","2.65ENTER"},
				{"2.50SHIFT","1.00Z","1.00X","1.00C","1.00V","1.00B","1.00N","1.00M","1.00,<","1.00.>","1.00/?","3.25SHIFT"},
				{"1.40Ctrl","1.40","1.40Alt","6.25","1.40Alt","1.40","1.40","1.40Ctrl"}
			};



	KeyboardButton buttons[][];
	KeyMap kMap;
	JPanel p[];
	int x,y,shiftX,shiftY;
	boolean shiftDown,returnFlag;
	Keyboard(){
		super(new GridLayout(5,0));
		setBorder(new TitledBorder(new EtchedBorder(Color.black,Color.gray)));
		p=new JPanel[5];
		for(int i=0;i<p.length;i++){
			p[i]=new JPanel(new FlowLayout(FlowLayout.LEFT,2,2));
			p[i].setBackground(Color.black);
			add(p[i]);
		}
		buttons=new KeyboardButton[5][];
		kMap=new KeyMap();
		addButtons();
	}
	private void addButtons(){
		String s;
		char ch1,ch2;
		for(int i=0;i<p.length;i++){
			buttons[i]=new KeyboardButton[rows[i].length];
			for(int j=0;j<rows[i].length;j++){
				p[i].add(buttons[i][j]=new KeyboardButton(rows[i][j]));
				kMap.put(kMap.keys[i][j],new MyInteger(i,j));
			}
		}
	}
	public void highlightKey(char ch){
		if(ch==10){
			buttons[x][y].released();
			buttons[2][12].pressed();
			x=2;
			y=12;
			returnFlag=true;
		}
		else if(ch==32){
			buttons[x][y].released();
			buttons[4][3].pressed();
			x=4;
			y=3;
			returnFlag=true;
		}
		MyInteger m=kMap.checkShift(ch);
		if(m!=null){
			buttons[shiftX][shiftY].released();
			buttons[m.x][m.y].pressed();
			shiftX=m.x;
			shiftY=m.y;
			shiftDown=true;
		}	
		else{
			buttons[shiftX][shiftY].released();
			shiftDown=false;
		}
		if(returnFlag) {
			returnFlag=false;
			return ;
		}
		m=kMap.getButton(ch);
		buttons[x][y].released();
		buttons[m.x][m.y].pressed();
		x=m.x;
		y=m.y;
	}

}
class KeyboardButton extends JPanel{
	private String s;
	private boolean flag;
	private Color background;
	KeyboardButton(String s){
		float size=getSize(s);
		setPreferredSize(new Dimension((int)(size*25),25));
		setBorder(new BevelBorder(BevelBorder.RAISED));			
		background=getBackground();
	}
	public float getSize(String s){
		String temp=s.substring(0,4);
		this.s=s.substring(4);
		try{
			Float fl=Float.valueOf(temp);
			return fl.floatValue();
		}catch(Exception e){return 1.00f;}
	}
	public void paint(Graphics g){
		super.paint(g);	
		int x=10;
		g.setFont(new Font("MonoSpaced",Font.BOLD,12));
		if(flag==true){
			g.setColor(Color.red);
			x=x+3;
		}
		switch(s.length()){
			case 0:
				break;
			case 1:
				g.drawString(s,5,x);		
				break;
			case 2:
				g.drawString(""+s.charAt(1),5,10);
				g.drawString(""+s.charAt(0),5,22);
				break;				
			default:
				g.drawString(s,5,x);
		}
	}
	public void pressed(){
		setBorder(new BevelBorder(BevelBorder.LOWERED));
		setBackground(Color.white);
		flag=true;
		repaint();
	}
	public void released(){
		setBorder(new BevelBorder(BevelBorder.RAISED));
		setBackground(background);
		flag=false;
		repaint();
	}
}


class KeyMap{	
	static String keys[][]={
			 {"`~","1!","2@","3#","4$","5%","6^","7&","8*","9(","0)","-_","=+","  "},
			 {"  ","Qq","Ww","Ee","Rr","Tt","Yy","Uu","Ii","Oo","Pp","[{","]}","\\|"},
			 {"  ","Aa","Ss","Dd","Ff","Gg","Hh","Jj","Kk","Ll",";:","'\"","  "},
		       	 {"  ","Zz","Xx","Cc","Vv","Bb","Nn","Mm",",<",".>","/?","  "},
			 {"  ","  ","  ","  ","  ","  ","  ","  ","  "}
			};
	String noShift="`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./";

	String rShift= "~!@#$%QWERTASDFGZXCVB";
	String lShift= "^&*()_+YUIOP{}|HJKL:\"NM<>?";

	TreeMap tm;

	KeyMap(){
		tm=new TreeMap();
	}
	public MyInteger checkShift(char ch){	
		int x;
		x=lShift.indexOf(ch);
		if(x!=-1) return new MyInteger(3,0);		
		x=rShift.indexOf(ch);
		if(x!=-1) return new MyInteger(3,11);
		return null;
	}
	public void put(String key,MyInteger value){
		String s1=""+key.charAt(0);
		String s2=""+key.charAt(1);
		tm.put(s1,value);
		tm.put(s2,value);
	}
	public MyInteger getButton(char ch){
		String s=""+ch;
		MyInteger i=(MyInteger)tm.get(s);
		return i;
	}
}

class MyInteger{
	int x,y;
	MyInteger(int x,int y){
		this.x=x;
		this.y=y;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -