JButton klick simulieren

Busi

Mitglied
Der Title ist nicht sehr aussagekräftig, aber mir viel kein besserer ein. Ich brauche einen Tipp.

Ich habe einen JButton. Ich möchte, wenn ich drauf klicke "Hallo welt" ausgeben. Soweit kein Problem.

Nun möchte ich, das wenn ich auf die Taste "h" drücke, der Button ein Klick ausführt, ohne aber "Hallo Welt" auszuführen. Sogesehen geht es mir um den Effekt.

Für jede Idee wäre ich dankbar.
 
Meiner Meinung nach musst du die zwei unterschiedlichen Eingaben trennen.
Für den klick auf den Button must du mit dem „ActionListener“ arbeiten, dieser reagiert auf deine Aktionen. Für die Taste h benötigst du den „KeyListener“, dieser reagiert auf deine Tastatur eingaben.

Also ActionListener und KeyListener verwenden, dann sollte es gehen.
 
Zuletzt bearbeitet:
du musst dem JButton einen ActionListener zufügen
und der Taste h einen KeyListener,

dann bei der KeyListener Funktion button.doClick() ausführen
 
@Mc Paul: Klar muss ich das, denn ich will ja das bei Tastatur eingabe was passiert, und Beim Mouseklick

@TheBodo: doClick ist das Komando für klicke auf den button. Das gibt dann aber auch "Hallo Welt" zurück. Soll er aber nicht. Nur bei einem Klick soll es das machen.

Vielleicht etwas besser formiliert.

"Ich will das die animation doClick() haben, aber nicht das event"
 
Jo das könnteste machen, die Funktion mit Hello World in den MouseListener werfen und dann trotzdem doClick(), natürlich die Funktion unter MouseUp!
 
Nehmen wir das mal als Ausgangscode
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Anzeige extends JFrame implements ActionListener, KeyListener{
    public JButton b;
    public Anzeige(){
        b = new JButton("Drücken");
        this.getContentPane().add(b);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(400, 400);
        this.setVisible(true);
    }
    public void actionPerformed(ActionEvent e) {System.out.println("Hello World");}
    public void keyTyped(KeyEvent e) {b.doClick();}
    public void keyPressed(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
}

Das mit dem Mouselistener habe ich jetzt nicht so recht verstanden, vielleicht bin ich schon ein wenig Blind geworden.
 
Hm, auf die Anwendung bin ich ja gespannt... wird's eine Art Trainer, Demo o.ä.?

Schönheitspreis gibt's keinen, aber bitte schön: :)
Java:
public void keyTyped(KeyEvent e) {   
    ActionListener[] listeners = b.getActionListeners();
    for (ActionListener listener: listeners)
        b.removeActionListener(listener);

    b.doClick();

    for (ActionListener listener: listeners)
            b.addActionListener(listener);        
}
 
Zuletzt bearbeitet:
Folgendes musst du beachten!

Den JButton mit dem MouseListener verknüpfen.

Da dir der MouseListener Probleme bereitet habe ich alle Möglichkeiten aufgelistet und kommentiert. Ich empfehle dir das ganze in einer neuen Class zu schreiben also vom eigentlichen Programm getrennt zu verwalten oder was auch sehr gut ist das ganze in einer inneren Class zu packen. Da du keinen vollständigen Code reingesetzt hast, sonder ein Fragment, kann ich dir auch keine Lösung schreiben die du anschließen übernähmen kannst.

Allerdings habe ich das ganze so einfach wie möglich gehalten



Code:
MausLauscher maus;

Code:
b.addMouseListener(maus);


Code:
class MausLauscher implements MouseListener{
  Component comp;


  public void mouseEntered(MouseEvent e){          //Der Mauszeiger betritt die Komponente.
   comp=e.getComponent();

  }
  
  public void mousePressed(MouseEvent e){         //Eine Maustaste wurde gedrückt.
   comp=e.getComponent();

  }
  
  public void mouseReleased(MouseEvent e){       //Eine Maustaste wurde losgelassen.
   comp=e.getComponent();

  }
  
  public void mouseClicked(MouseEvent e){          //Eine Maustaste wurde gedrückt und wieder losgelassen.
   comp=e.getComponent();
   
   if(comp.equals(b)){                                          //Nur wenn b gedrückt und wieder losgelasen wird wird etwas ausgegeben
     System.out.println("Hallo welt");
   }

  }
  
  public void mouseExited(MouseEvent e){          //Der Mauszeiger verläßt die Komponente.
   comp=e.getComponent();

  }
 } //Ende vom MausLauscher
 
Hallo, matdacat.

Also, ich habe es mal umgesetzt. Die Idee ist gut, aber leider geht es nicht. Sehr schade. Ich habe stelle den Code nochmal online, nicht das ich einen tippfehler habe. :)

PHP:
public class test extends JFrame implements ActionListener, KeyListener{
    public JButton b;
    public test(){
        b = new JButton("Drücken");
        b.addActionListener(this);
        this.getContentPane().add(b);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(400, 400);
        this.addKeyListener(this);
        this.setVisible(true);
    }
    public void actionPerformed(ActionEvent e) {
        System.out.println("Hello World");
    }
    public void keyTyped(KeyEvent e) {
        ActionListener [] a = b.getActionListeners();
        for(int i=0;i<a.length;i++)b.removeActionListener(a[i]);
        b.doClick();
        for(int i=0;i<a.length;i++)b.addActionListener(a[i]);
    }
    public void keyPressed(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
}

Hallo Mc Paul,

sorecht verstanden habe ich immer noch nicht was die hier mit einem Mouselistener ausrichten möchtest.
 

Neue Beiträge

Zurück