hallo,
ich bastel an einem kleinen midi-programm und hab dabei ein problem. ich erstelle ActionListener und KeyListener um bei Tastendruck (Enter) bzw. Bzttonklick einen Ton abspielen zu lassen. Mit meinem Actionlistener funktioniert das schon sehr gut, wenn ich jedoch auf Enter drücke passiert nichts.
Ich habe die Vermutung, dass es keine große Sache ist und ich lediglich ein Brett vorm Kopf habe
hoffentlich kann mir jemand helfen.
und der vollstädnigkeitshalber noch meine main methode
ich bastel an einem kleinen midi-programm und hab dabei ein problem. ich erstelle ActionListener und KeyListener um bei Tastendruck (Enter) bzw. Bzttonklick einen Ton abspielen zu lassen. Mit meinem Actionlistener funktioniert das schon sehr gut, wenn ich jedoch auf Enter drücke passiert nichts.
Ich habe die Vermutung, dass es keine große Sache ist und ich lediglich ein Brett vorm Kopf habe
hoffentlich kann mir jemand helfen.
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.sound.midi.*;
public class View extends JFrame {
JTextArea t;
View () {
//Grafische Oberfläche aufbauen:
JPanel cp = (JPanel) this.getContentPane();
cp.setLayout(new BorderLayout());
JButton b = new JButton("Start");
cp.add(b,BorderLayout.NORTH);
this.t = new JTextArea();
cp.add(t,BorderLayout.CENTER);
t.addKeyListener(new KeyListener (){;
//Hier implementiere ich meinen Keylistener
public void keyTyped(KeyEvent a){
if (a.getKeyCode()== KeyEvent.VK_ENTER){
// MIDI:
// MID - Meldung definieren:
ShortMessage myMsg = new ShortMessage();
try {
// Midi - Meldung konfigurieen:
// (Note C (60) in mittlerer Lautstärke (93))
myMsg.setMessage(ShortMessage.NOTE_ON, 0, 60, 93);
// Zeitmarke weglassen:
long timeStamp = -1;
// Receiver Objekt definieren:
Receiver rcvr = null;
try {
// Den Standard - Receiver (Synthi) holen:
rcvr = MidiSystem.getReceiver();
} catch (MidiUnavailableException e1) {
System.out.println("Fehler beim Holen des Receivers!");
e1.printStackTrace();
}
// Die Meldung an den Receiver schicken:
rcvr.send(myMsg, timeStamp);
try {
// Warten, bis der Ton verklungen ist:
Thread.sleep(2000);
} catch (InterruptedException e2) {
System.out.println("Fehler beim Warten!");
e2.printStackTrace();
}
} catch (InvalidMidiDataException e3) {
System.out.println("Fehler bei Meldung!");
e3.printStackTrace();
}
t.setText("Fertig!");
}
}
public void keyPressed( KeyEvent b ){
if (b.getKeyCode()== KeyEvent.VK_ENTER){
// MIDI:
// MID - Meldung definieren:
ShortMessage myMsg = new ShortMessage();
try {
// Midi - Meldung konfigurieen:
// (Note C (60) in mittlerer Lautstärke (93))
myMsg.setMessage(ShortMessage.NOTE_ON, 0, 60, 93);
// Zeitmarke weglassen:
long timeStamp = -1;
// Receiver Objekt definieren:
Receiver rcvr = null;
try {
// Den Standard - Receiver (Synthi) holen:
rcvr = MidiSystem.getReceiver();
} catch (MidiUnavailableException e1) {
System.out.println("Fehler beim Holen des Receivers!");
e1.printStackTrace();
}
// Die Meldung an den Receiver schicken:
rcvr.send(myMsg, timeStamp);
try {
// Warten, bis der Ton verklungen ist:
Thread.sleep(2000);
} catch (InterruptedException e2) {
System.out.println("Fehler beim Warten!");
e2.printStackTrace();
}
} catch (InvalidMidiDataException e3) {
System.out.println("Fehler bei Meldung!");
e3.printStackTrace();
}
t.setText("Fertig!");
}
}
public void keyReleased(KeyEvent c) {}
});
//Hier der (funktionierende) ActionListener
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// MIDI:
// MID - Meldung definieren:
ShortMessage myMsg = new ShortMessage();
try {
// Midi - Meldung konfigurieen:
// (Note C (60) in mittlerer Lautstärke (93))
myMsg.setMessage(ShortMessage.NOTE_ON, 0, 60, 93);
// Zeitmarke weglassen:
long timeStamp = -1;
// Receiver Objekt definieren:
Receiver rcvr = null;
try {
// Den Standard - Receiver (Synthi) holen:
rcvr = MidiSystem.getReceiver();
} catch (MidiUnavailableException e1) {
System.out.println("Fehler beim Holen des Receivers!");
e1.printStackTrace();
}
// Die Meldung an den Receiver schicken:
rcvr.send(myMsg, timeStamp);
try {
// Warten, bis der Ton verklungen ist:
Thread.sleep(2000);
} catch (InterruptedException e2) {
System.out.println("Fehler beim Warten!");
e2.printStackTrace();
}
} catch (InvalidMidiDataException e3) {
System.out.println("Fehler bei Meldung!");
e3.printStackTrace();
}
t.setText("Fertig!");
}
}
);
}
}
und der vollstädnigkeitshalber noch meine main methode
Java:
public class Yaca {
public static void main(String[] args) {
View frame = new View();
frame.setSize(300,200);
frame.setVisible(true);
}
}