弹奏你最美丽的音符
今天我们来做的是电脑钢琴,包括最基本的8个白键和5个黑键,声音包会在附件中给出。
首先来看看我们的钢琴界面吧:
我们要实现的功能有:
当你鼠标移动到对应的按键时,就会发出对应的声音
当我们按数字键1-8时,也会弹吹对应白键的声音。
这就需要我们添加鼠标监听器和键盘监听器,鼠标监听器我们选择mouseEntered,键盘监听器我们选择keyPresse.
首先我们设置监听器:
public class MusicListener extends MouseAdapter implements KeyListener {
private AudioClip audioclip;
/**
* 按键盘的事件
*/
public void keyPressed(KeyEvent e) {
try {
//调用Applet里的方法获取文件
audioclip = Applet.newAudioClip(new URL(
"file:///G:/JAVA/javastudy/video/white" + e.getKeyChar()
+ ".wav"));
audioclip.play();//调用play方法播放
} catch (Exception e1) {
}
}
/**
* 鼠标进入事件
*/
public void mouseEntered(MouseEvent e) {
try {
//调用Applet里的方法获取文件
audioclip = Applet.newAudioClip(new URL(
"file:///G:/JAVA/javastudy/video/" + ((JButton) e.getSource()).getActionCommand()
+ ".wav"));
audioclip.play();//调用play方法播放
} catch (Exception e1) {
}
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
}
设置完成以后,我们开始写主界面:
public class Piano extends JFrame {
public static void main(String[] args) {
Piano p = new Piano();
p.initUI();
}
// 实例化一个钢琴监听器对象
MusicListener ml = new MusicListener();
// 登陆界面
public void initUI() {
this.setTitle("键盘钢琴");// 设置标题
this.setSize(600, 570);// 设置大小
this.setDefaultCloseOperation(3);// 设置关闭按钮
this.setResizable(false);// 设置不可调节大小
this.setLocationRelativeTo(null);// 设置居中
this.setbackground();// 设置背景为空
this.addKeyListener(ml);// 给窗体加上键盘监听器
this.setFocusable(true);// 设置焦点在窗体上
this.setVisible(true);// 设置窗体可见
JPanel jpsouth = jpsouth();// 调用方法得到南部窗体
this.add(jpsouth, BorderLayout.SOUTH);// 将南部窗体添加到面板
}
/**
* 设置背景图片
*/
public void setbackground() {
ImageIcon noteimage = new ImageIcon("images/piano/musicalnote.jpg");// 实例化一个图片对象
JLabel jlaimage = new JLabel(noteimage);// 实例化一个标签,并将背景图片添加到标签上
jlaimage.setBounds(0, 0, noteimage.getIconWidth(),
noteimage.getIconHeight());// 设置标签的绝对位置,宽度和高度
this.getLayeredPane().add(jlaimage, new Integer(Integer.MIN_VALUE));// 将标签添加到底层面板上
JPanel contentPane = (JPanel) this.getContentPane();// 得到上层面板
contentPane.setOpaque(false);// 设置上层面板透明
}
/**
* 设置南部面板的方法
*
* @return 南部面板
*/
public JPanel jpsouth() {
JPanel panel = new JPanel();// 实例化一个面板对象
panel.setLayout(new GridLayout(1, 13, 0, 0));// 设置面板的布局为网格布局
panel.setPreferredSize(new Dimension(0, 145));// 设置面板的高度
JButton[] jbu = new JButton[16];// 实例化按钮数组
int[] array = { 1, 11, 2, 12, 3, 4, 13, 5, 14, 6, 15, 7, 8 };// 定义整型数组存储按钮顺序
// 对白键进行循环
for (int i = 1; i < 9; i++) {
jbu[i] = new JButton();// 实例化按钮对象
jbu[i].setActionCommand("white" + i);// 设置命令字符串
jbu[i].addMouseListener(ml);// 给按钮添加鼠标监听器
jbu[i].setBackground(Color.WHITE);// 设置按钮背景为白色
}
// 对黑键进行循环
for (int i = 11; i < 16; i++) {
jbu[i] = new JButton();// 实例化按钮对象
jbu[i].setActionCommand("black" + (i - 10));// 设置命令字符串
jbu[i].addMouseListener(ml);// 给按钮添加鼠标监听器
jbu[i].setBackground(Color.BLACK);// 设置按钮背景为黑色
}
for (int i = 0; i < array.length; i++) {
panel.add(jbu[array[i]]);// 将按钮添加到窗体上
}
return panel;// 返回面板
}
}
下面就用我们的钢琴来弹奏美妙的音符吧~~