我有一個MIDI鋼琴程序,當鼠標在筆記上單擊或鍵入某個特定鍵盤鍵時,會觸發一個音符播放。我希望keyPressed
事件的行爲方式與mousePressed
事件的行爲相同,觸發按鍵時按下一次音符。java keyPressed事件在按下按鍵時保持觸發
但是,當按鍵仍然按下時,它會一直播放音符。我已經看過關於這個主題的一些主題,但我仍然不知道如何解決這個問題(我沒有完全理解我可以如何應用其他方法)。
這裏是keyPressed
代碼我現在有:
@Override
public void keyPressed(KeyEvent ke) {
if(ke.getKeyCode() == KeyEvent.VK_Z)
{
channel.noteOn (((WhiteKey) WhiteKeys[0]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_X)
{
channel.noteOn (((WhiteKey) WhiteKeys[1]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_C)
{
channel.noteOn (((WhiteKey) WhiteKeys[2]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_V)
{
channel.noteOn (((WhiteKey) WhiteKeys[3]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_B)
{
channel.noteOn (((WhiteKey) WhiteKeys[4]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_N)
{
channel.noteOn (((WhiteKey) WhiteKeys[5]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_M)
{
channel.noteOn (((WhiteKey) WhiteKeys[6]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_COMMA)
{
channel.noteOn (((WhiteKey) WhiteKeys[7]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_PERIOD)
{
channel.noteOn (((WhiteKey) WhiteKeys[8]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_SLASH)
{
channel.noteOn (((WhiteKey) WhiteKeys[9]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_S)
{
channel.noteOn (((BlackKey) BlackKeys[0]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_D)
{
channel.noteOn (((BlackKey) BlackKeys[1]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_G)
{
channel.noteOn (((BlackKey) BlackKeys[2]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_H)
{
channel.noteOn (((BlackKey) BlackKeys[3]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_J)
{
channel.noteOn (((BlackKey) BlackKeys[4]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_L)
{
channel.noteOn (((BlackKey) BlackKeys[5]).getNote(), 127);
}
else if(ke.getKeyCode() == KeyEvent.VK_SEMICOLON)
{
channel.noteOn (((BlackKey) BlackKeys[6]).getNote(), 127);
}
}
如何實現keyDown呢? – 2013-04-26 17:34:22
謝謝你的迴應!請原諒我的無知,但是如何實現keyDown,因爲它不是KeyListener接口的一部分?我也需要在keyListener接口中使用keyReleased方法。 – AFinch 2013-04-26 17:57:52