📄 keyboard.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 + -