📄 devicepanel.java
字号:
/*
* Created on 2005-9-20 by pcy
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package a.a.a.b;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.*;
public class DevicePanel extends JPanel implements MouseListener,MouseMotionListener {
public static final long serialVersionUID=1;
public static int BUTTON_CNT=22;
public static int X=0;
public static int Y=1;
public static int W=2;
public static int H=3;
private Image[] buttonImage=new Image[BUTTON_CNT];
private int[][] buttonPos=new int[BUTTON_CNT][4];
private Image deviceImage;
private Image alphabetImage;
private int alphabetX;
private int alphabetY;
private int btnIndex;
private int hotIndex;
Cursor handCursor=new Cursor(Cursor.HAND_CURSOR);
Cursor arrowCursor=new Cursor(Cursor.DEFAULT_CURSOR);
private EmuButton buttons[];
public DevicePanel() {
super();
// buttons=new EmuButton[22];
// for(int i=0;i<22;++i){
// buttons[i]=new EmuButton(this,getKeyIndex(i));
// this.add(buttons[i]);
// buttons[i].setVisible(true);
// }
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.setLayout(null);
this.setFocusable(false);
}
private int getKeyIndex(int imgIdx){
switch(imgIdx){
case 0:
return e.KEY_INDEX_SOFT1;
case 1:
return e.KEY_INDEX_SOFT2;
case 2:
return e.KEY_INDEX_SEND;
case 3:
return e.KEY_INDEX_END;
case 4:
return e.KEY_INDEX_SELECT;
case 5:
return e.KEY_INDEX_RIGHT;
case 6:
return e.KEY_INDEX_LEFT;
case 7:
return e.KEY_INDEX_UP;
case 8:
return e.KEY_INDEX_DOWN;
case 9:
return e.KEY_INDEX_NUM1;
case 10:
return e.KEY_INDEX_NUM2;
case 11:
return e.KEY_INDEX_NUM3;
case 12:
return e.KEY_INDEX_NUM4;
case 13:
return e.KEY_INDEX_NUM5;
case 14:
return e.KEY_INDEX_NUM6;
case 15:
return e.KEY_INDEX_NUM7;
case 16:
return e.KEY_INDEX_NUM8;
case 17:
return e.KEY_INDEX_NUM9;
case 18:
return e.KEY_INDEX_STAR;
case 19:
return e.KEY_INDEX_NUM0;
case 20:
return e.KEY_INDEX_POUND;
case 21:
return e.KEY_INDEX_C;
}
return -1;
}
public void setImage(Image img){
deviceImage=img;
}
public void setAlphabetImage(Image img){
alphabetImage=img;
}
public void setAlphabetPos(int x, int y){
alphabetX=x;
alphabetY=y;
}
public void resetAllButtons(BufferedImage img, int[] pos){
int bw=img.getWidth(null)/22;
int bh=img.getHeight(null);
int x=0;
int y=0;
int p=0;
int bw2=bw/2;
int bh2=bh/2;
int ox=bw/4;
int oy=bh/4;
for(int i=0;i<22;++i){
if(i>3&&i<9){
//buttons[i].setBounds(pos[p++]+ox,pos[p++]+oy,bw2,bh2);
//buttons[i].setImage(img.getSubimage(x+ox,y+oy,bw2,bh2));
buttonPos[i][X]=pos[p++]+ox;
buttonPos[i][Y]=pos[p++]+oy;
buttonPos[i][W]=bw2;
buttonPos[i][H]=bh2;
buttonImage[i]=img.getSubimage(x+ox,y+oy,bw2,bh2);
}else{
//buttons[i].setBounds(pos[p++],pos[p++],bw,bh);
//buttons[i].setImage(img.getSubimage(x,y,bw,bh));
buttonPos[i][X]=pos[p++];
buttonPos[i][Y]=pos[p++];
buttonPos[i][W]=bw;
buttonPos[i][H]=bh;
buttonImage[i]=img.getSubimage(x,y,bw,bh);
}
x+=bw;
}
}
private int getIndex(int x, int y){
for(int i=0;i<BUTTON_CNT;++i){
if(x>buttonPos[i][X]&&x<buttonPos[i][X]+buttonPos[i][W]
&&y>buttonPos[i][Y]&&y<buttonPos[i][Y]+buttonPos[i][H]){
return i;
}
}
return -1;
}
public void mouseClicked(MouseEvent evt){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mousePressed(MouseEvent evt){
btnIndex=getIndex(evt.getX(),evt.getY());
if(btnIndex>=0){
e.getInstance(null). keyPressed(e.currentKey[getKeyIndex(btnIndex)]);
hotIndex=-1;
paintBtn(btnIndex);
}
}
public void mouseReleased(MouseEvent evt){
int temp=getIndex(evt.getX(),evt.getY());
if(temp==btnIndex&&btnIndex>=0){
e.getInstance(null). keyReleased(e.currentKey[getKeyIndex(btnIndex)]);
hotIndex=temp;
paintBtn(temp);
}
hotIndex=temp;
}
public void mouseMoved(MouseEvent evt){
int idx=getIndex(evt.getX(),evt.getY());
if(idx<0){
if(btnIndex>=0){
hotIndex=-1;
paintBtn(btnIndex);
this.setCursor(arrowCursor);
}
}else{
if(idx!=btnIndex){
hotIndex=idx;
if(btnIndex>=0){
paintBtn(btnIndex);
}else{
this.setCursor(handCursor);
}
paintBtn(idx);
}
}
hotIndex=idx;
btnIndex=idx;
}
public void mouseDragged(MouseEvent evt){
}
private void paintBtn(int idx){
if(idx<0)return;
this.repaint(buttonPos[idx][X],buttonPos[idx][Y],
buttonPos[idx][W],buttonPos[idx][H]);
}
protected void paintComponent(Graphics gr){
if(deviceImage!=null){
gr.drawImage(deviceImage,0,0,null);
}
if(hotIndex>=0){
for(int i=0;i<BUTTON_CNT;++i){
if(hotIndex==i){
gr.drawImage(buttonImage[i],buttonPos[i][X],buttonPos[i][Y],null);
break;
}
}
}
if(alphabetImage!=null){
gr.drawImage(alphabetImage,alphabetX,alphabetY,null);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -