📄 piano.java
字号:
import java.applet.*;import java.awt.*;import java.awt.event.*;public class Piano extends Applet implements MouseListener,KeyListener,MouseMotionListener{ Image m_ImgUp;//键盘、鼠标松开时显示的键盘图片 Image m_ImgDown;//键盘、鼠标按下时显色。示的键盘图片 AudioClip[] m_AudioClip=new AudioClip[14]; int[] m_nState=new int[14]; int m_nOldDownCount=-1; final int IMG_WIDTH=17; final int IMG_HEIGHT=85; final int STATE_UP=0; final int STATE_DOWN=1; public void init() { for(int i=0;i<14;i++) { m_nState[i]=0; }// m_nState[2]=1; m_ImgUp=getImage(getDocumentBase(),"img/up.gif"); m_ImgDown=getImage(getDocumentBase(),"img/down.gif"); MediaTracker mediaTracker=new MediaTracker(this); mediaTracker.addImage(m_ImgUp,0); mediaTracker.addImage(m_ImgDown,1); try { mediaTracker.waitForID(0); } catch(Exception e) { System.out.println("m_ImgUp is not loaded right"); } try { mediaTracker.waitForID(1); } catch(Exception e) { System.out.println("m_ImgDown is not loaded right"); } for(int i=0;i<14;i++) { String sUrl=new String("au/"+i+".au"); m_AudioClip[i]=getAudioClip(getCodeBase(),sUrl); } addKeyListener(this); addMouseListener(this); addMouseMotionListener(this); } public void paint(Graphics g) { for(int i=0;i<14;i++) { switch(m_nState[i]) { case STATE_UP: g.drawImage(m_ImgUp,i*IMG_WIDTH,0,this);// System.out.println("0"); break; case STATE_DOWN: g.drawImage(m_ImgDown,i*IMG_WIDTH,0,this);// System.out.println("1"); break; } } } public static void main(String[] args) { Frame frame=new Frame(); Piano piano=new Piano(); frame.add(piano); Dimension dimension=new Dimension(40,200); frame.setSize(dimension); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setVisible(true); frame.repaint() ; } void showSound(int nCount) { m_AudioClip[nCount].play(); }/** * 实现MouseListener里的方法 */ public void mouseClicked(MouseEvent e) { //Invoked when the mouse has been clicked on a component. int nMouseCount=e.getClickCount();// System.out.println("你触发了"+nMouseCount+"击事件"); } public void mouseEntered(MouseEvent e) { //Invoked when the mouse enters a component. } public void mouseExited(MouseEvent e) { //Invoked when the mouse exits a component. if(m_nOldDownCount!=-1)m_nState[m_nOldDownCount]=STATE_UP; m_nOldDownCount=-1; } public void mousePressed(MouseEvent e) { //Invoked when a mouse button has been pressed on a component.// System.out.println("你的鼠标已被按下"); int nX=e.getX(); int nY=e.getY();// System.out.println("你的鼠标时在坐标:"+nX+","+nY+"处按下");// System.out.println(nX); int nCount=nX/IMG_WIDTH; m_nState[nCount]=STATE_DOWN; showSound(nCount); m_nOldDownCount=nCount; Graphics g=getGraphics();// g.fillRect(nCount*IMG_WIDTH,0,IMG_WIDTH,IMG_HEIGHT); g.drawImage(m_ImgDown,nCount*IMG_WIDTH,0,this);// repaint(); } public void mouseReleased(MouseEvent e) { //Invoked when a mouse button has been released on a component.// System.out.println("你的鼠标已被松开"); int nX=e.getX(); int nY=e.getY();// System.out.println("你的鼠标时在坐标:"+nX+","+nY+"处松开"); int nCount=nX/IMG_WIDTH; m_nState[nCount]=STATE_UP; m_nOldDownCount=-1; Graphics g=getGraphics(); g.drawImage(m_ImgUp,nCount*IMG_WIDTH,0,this);// repaint(); }/** * 实现KeyListener里的方法 */ public void keyPressed(KeyEvent e) {// System.out.println("你的键盘已经按下"); int nKeyCode=e.getKeyCode();// System.out.println("现在按下的键值是"+nKeyCode); String sKeyName=e.getKeyText(nKeyCode);// System.out.println("现在按下的键名是"+sKeyName);// System.out.println("KeyEvent的VK_8常量是"+KeyEvent.VK_8); boolean bControlDown=e.isControlDown();// if(bControlDown)System.out.println("Ctrl键按下");// else System.out.println("Ctrl键没有被按下"); int nCount=-1; switch(nKeyCode) { case KeyEvent.VK_1: nCount=0; break; case KeyEvent.VK_2: nCount=1; break; case KeyEvent.VK_3: nCount=2; break; case KeyEvent.VK_4: nCount=3; break; case KeyEvent.VK_5: nCount=4; break; case KeyEvent.VK_6: nCount=5; break; case KeyEvent.VK_7: nCount=6; break; default: return; } if(bControlDown)nCount=nCount+7; setPianoKeyDown(nCount); showSound(nCount); Graphics g=getGraphics(); g.drawImage(m_ImgDown,nCount*IMG_WIDTH,0,this);// repaint(); //Invoked when a key has been pressed. } public void keyReleased(KeyEvent e) { //Invoked when a key has been released.// System.out.println("你的键盘已经松开"); int nKeyCode=e.getKeyCode();// System.out.println("现在松开的键值是"+nKeyCode); String sKeyName=e.getKeyText(nKeyCode);// System.out.println("现在松开的键名是"+sKeyName);// System.out.println("KeyEvent的VK_8常量是"+KeyEvent.VK_8); boolean bControlDown=e.isControlDown(); int nCount=-1; switch(nKeyCode) { case KeyEvent.VK_1: nCount=0; break; case KeyEvent.VK_2: nCount=1; break; case KeyEvent.VK_3: nCount=2; break; case KeyEvent.VK_4: nCount=3; break; case KeyEvent.VK_5: nCount=4; break; case KeyEvent.VK_6: nCount=5; break; case KeyEvent.VK_7: nCount=6; break; default: return; } if(bControlDown)nCount=nCount+7; m_nState[nCount]=STATE_UP; Graphics g=getGraphics(); g.drawImage(m_ImgUp,nCount*IMG_WIDTH,0,this);// repaint(); } public void keyTyped(KeyEvent e) { //Invoked when a key has been typed. } void setPianoKeyDown(int nCount) { for(int i=0;i<14;i++) { m_nState[i]=STATE_UP; } m_nState[nCount]=STATE_DOWN; } void setAllPianoKeyUp() { for(int i=0;i<14;i++) { m_nState[i]=STATE_UP; } } /** * 实现MouseMotionListener里的方法 */ public void mouseDragged(MouseEvent e) { //Invoked when a mouse button is pressed on a component and then dragged. int nX=e.getX(); int nY=e.getY(); System.out.println("鼠标拖动到:x="+nX+" y="+nY); int m_nTempCount=nX/IMG_WIDTH; if(m_nTempCount==m_nOldDownCount)return; m_nState[m_nTempCount]=STATE_DOWN; m_nState[m_nOldDownCount]=STATE_UP; showSound(m_nTempCount); Graphics g=getGraphics(); g.drawImage(m_ImgDown,m_nTempCount*IMG_WIDTH,0,this); g.drawImage(m_ImgUp,m_nOldDownCount*IMG_WIDTH,0,this); m_nOldDownCount=m_nTempCount; } public void mouseMoved(MouseEvent e) { //Invoked when the mouse button has been moved on a component (with no buttons no down) int nX=e.getX(); int nY=e.getY(); System.out.println("鼠标移动到:x="+nX+" y="+nY); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -