//Piano.java
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
//Download by http://www.codefans.net
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_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);
break;
case STATE_DOWN:
g.drawImage(m_ImgDown,i*IMG_WIDTH,0,this);
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();
}
//响应点击鼠标
public void mouseClicked(MouseEvent e)
{
int nMouseCount=e.getClickCount();
}
//响应鼠标进入
public void mouseEntered(MouseEvent e)
{
}
//响应鼠标退出
public void mouseExited(MouseEvent e)
{
if(m_nOldDownCount!=-1)m_nState[m_nOldDownCount]=STATE_UP;
m_nOldDownCount=-1;
}
//响应按下鼠标
public void mousePressed(MouseEvent e)
{
int nX=e.getX();
int nY=e.getY();
int nCount=nX/IMG_WIDTH;
m_nState[nCount]=STATE_DOWN;
showSound(nCount);
m_nOldDownCount=nCount;
Graphics g=getGraphics();
g.drawImage(m_ImgDown,nCount*IMG_WIDTH,0,this);
}
//响应松开鼠标
public void mouseReleased(MouseEvent e)
{
int nX=e.getX();
int nY=e.getY();
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);
}
//响应按下键盘
public void keyPressed(KeyEvent e)
{
int nKeyCode=e.getKeyCode();
String sKeyName=e.getKeyText(nKeyCode);
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;
setPianoKeyDown(nCount);
showSound(nCount);
Graphics g=getGraphics();
g.drawImage(m_ImgDown,nCount*IMG_WIDTH,0,this);
}
public void keyReleased(KeyEvent e)
{
int nKeyCode=e.getKeyCode();
String sKeyName=e.getKeyText(nKeyCode);
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);
}
public void keyTyped(KeyEvent e)
{
}
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;
}
}
//响应拖动鼠标
public void mouseDragged(MouseEvent e)
{
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)
{
int nX=e.getX();
int nY=e.getY();
System.out.println("鼠标移动到:x="+nX+" y="+nY);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Java Piano模拟钢琴效果的完整源码,知识点:使用AudioClip类播放声音,使用Java MouseEvent类处理鼠标事件,使用Image类制作图片,使用Frame类制作界面框架。运行后创建一个带有模拟钢琴键盘的面板,用户可以通过键盘或者鼠标来“敲击”钢琴键盘发出声音,也可以通过电脑键盘的组合键实现钢琴的高音。 编程思路:首先制作模拟钢琴的实例,生成程序界面:先通过语句Image m_ImgUp生成键盘、鼠标松开时显示的键盘图片,再通过语句Image m_ImgDown生成键盘、鼠标按下时显示的键盘图片,最后通过语句m_ImgUp=getImage(getDocumentBa
资源详情
资源评论
资源推荐
收起资源包目录
A110007544-24079.rar (25个子文件)
okbase.net
模拟钢琴
Piano.class 5KB
Piano.java 7KB
AU
7.AU 980B
14.AU 989B
10.AU 989B
9.AU 989B
1.AU 946B
11.AU 989B
4.AU 1006B
8.AU 1KB
12.AU 989B
2.AU 1KB
6.AU 1KB
5.AU 1016B
0.AU 1010B
3.AU 993B
13.AU 989B
_desktop.ini 10B
Java模拟钢琴.doc 66KB
Piano.html 351B
IMG
DOWN.GIF 220B
Thumbs.db 5KB
UP.GIF 279B
_desktop.ini 10B
_desktop.ini 10B
共 25 条
- 1
weixin_38569675
- 粉丝: 4
- 资源: 980
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0