GUI programmieren

K

KK40

Gast
Hallo,

ich programmiere gerade eine GUI, welche mehrere Buttons hat.
Mein Drücken des Leertaste sowie beim Drücken eines bestimmten Buttons soll eine bestimmte Funktion ausgeführt werden.

Leider habe ich das Problem, daß beim Drücken der Leertaste nur dann die gewünschte Funktion ausgeführt wird, wenn ich kurz zuvor auch auf den bestimmten Button gedrückt habe, ansonsten wird beim Drücken dieser Taste immer die Funktion des zuletzt gedrückten Buttons ausgeführt.

Nach meinen bisherigen Recherchen muß ich anscheinend den Button mit dieser Leertaste fokkusieren. Aber wie mache ich das in meinem Programm?


In der Klasse GUI werden die Buttons wie folgt programmiert:

public class GUI extends JFrame implements ActionListener {
…...
…..

private Action action;
…....
…....
JPanel v2Box = new JPanel(new GridLayout(3, 1));
autoButton = new JButton("automatisch");
autoButton.setActionCommand("auto");
autoButton.addActionListener(action);
autoButton.setEnabled(true);
v2Box.add(autoButton);

manuButton = new JButton("manuell");
manuButton.setActionCommand("manu");
manuButton.addActionListener(action);
manuButton.setEnabled(true);
v2Box.add(manuButton);

spaceButton = new JButton("Leertaste");
spaceButton.addKeyListener(action);

spaceButton.setActionCommand("leer");
spaceButton.addActionListener(action);
spaceButton.setEnabled(true);
v2Box.add(spaceButton);



In der Klasse Action werden dann die folgenden Funktionen ausgeführt:

public class Action extends JComponent implements ComponentListener,
ActionListener, KeyListener {
…......
….......

public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "auto") {
manuell = false;
enterGedr = false;
System.out.println("auto gedrueckt " + manuell);

}
else if (e.getActionCommand() == "manu") {
manuell = true;
enterGedr = false;
System.out.println("manu gedrueckt " + manuell);

}
else if (e.getActionCommand() == "leer") {
enterGedr = true;
System.out.println("Leer gedrueckt");
}
}

public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
enterGedr = true;
System.out.println("Leertaste gedrueckt");
}

}

public void keyTyped(KeyEvent e) {}

public void keyReleased(KeyEvent e) {}
 
Musst du nicht. Du kannst auch einen Eventhandler schreiben, der beim Drücken der Leertaste ausgeführt wird und den Eventhandler aufruft, der das Push-Event des gewünschten Buttons ausführt.
Oder du schreibst eine Funktion, die dann von beiden Eventhandlern (Button und Taste) aufgerufen wird.
 
Danke für die schnelle Antwort.

Aber genau da liegt mein Problem. Wie setze ich das in meinem Programm um.
Kannst Du mir vielleicht ein Beispiel zeigen?
 
*Erzeugen eines neuen ActionListener mit der Nötigen Eventbehandlung */
ActionListener al = new ActionListener(){
public void actionPerformed(ActionEvent e){

if(e.getSource()==weiter){
//tue etwas
}
if (e.getSource()==menueHilfe){
//tue etwas
}
}
};
/*Anmelden des ActionListeners an alle Elemente*/
this.weiter.addActionListener(al);
this.menueHilfe.addActionListener(al);

so wird gemacht

erst actionlistener erzeugen -> die events (knopfdruck) auslesen -> den button am listener anmelden

wobei weiter und menueHilfe die namen der buttons sind
 
Java-Tutorial für Event-Handler

  • Die Interaktion mit einem GUI geschieht über Events.
  • Ein Event ist eine Aktion, welche durch einen Benutzer initialisiert wurde, sei es durch Drücken eines Buttons, Verschieben der Maus, Drücken einer Taste ...
  • Damit Java auf die Aktion eines Benutzers Event-Listener reagiert, muss zuerst eine Event-Handler registriert und ein zugehöriger implementiert werden.
Code:
public interface ActionLister extends EventListener
{
    public void actionPerformed(ActionEvent e);
}

public interface KeyListener extends EventListener
{
    public void keyPressed(KeyEvent e );
    public void keyReleased(KeyEvent e );
    public void keyTyped(KeyEvent e );
}

public interface MouseListener extends EventListener
{
    public void mouseClicked(MouseEvent e);
}
Auszug aus: Event-Handling in Java (PDF)
 
Zurück
Oben