Input/Output Tastenschläge einer Taste zählen

Rotzglocke

Mitglied
Hallo Leute,

Ich möchte gerne für ein Bekannten ein kleines Programm schreiben was immer einen Hochzählt, wenn er die Taste F12 drückt.

soweit so gut...

Hatte nur Java Grundlagen in der Schule gehabt(Berufsschule) und habe Probleme, wie ich es bewerkstellige. Habe ein JFrame genommen wo ich in einem Label den "Zähler" ausgeben lassen will.

Nach ein bisschen schieben und verstellen, um das grafisch an zu zeigen, habe ich einfach mal angefangen.

Ich weiß nicht wie ich den Tastendruck oder wie auch immer das Heißt überprüft. Darum bitte ich um Hilfe.

Wusste nicht ob ich eine schleife brauche um mehrere Eingaben hintereinander abzufragen deswegen die Endloschleife.

Java:
public static void main(String[] args) {
    new zähler("zähler");
    
    int eingabe = 0;
    
    int schleifenCounter =  0;
    
    While(schleifenCounter >=0){
      
            
            
      If(eingabe = "+"){
        schleifenCounter = schleifenCounter + 1;
        label2.setText(schleifenCounter);
      };
      
      
    };    
    
    
  }

Ich hoffe es ist verständlich was ich haben will.
 
Ok danke für die schnelle Antwort.

Hab recherschiert und versucht es mal selber einzufügen, bzw. es zu lösen per Keylistener, um den Zähler bei F12 hochzählen zu lassen.


nächstes Problem er meckert bei meiner If anweisung:

zähler.java:64:19: error: non-static method getKeyChar() cannot be referenced from a static context
if (KeyEvent.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
^
zähler.java:66:21: error: non-static method getKeyCode() cannot be referenced from a static context
if (KeyEvent.getKeyCode() == KeyEvent.VK_F12) {


(siehe Quellcode) Hab ich ein fehler gemacht beim schreiben der 3 Methoden????



hier der quelltext(hab einfach mal den Code fürs erstellen des Frames weggelassen, das wurde automatisch engefügt als ich mit drag and drop es "erstellt" habe:
Java:
public class zähler extends JFrame implements KeyListener {



    
    public void keyTyped(KeyEvent e) {}
    
    public void keyReleased(KeyEvent e) {}
    
    public void keyPressed(KeyEvent e) {
      
      
// hier meckert er
if (keyEvent.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
        
        if (keyEvent.getKeyCode() == KeyEvent.VK_F12) {
          int counter = counter + 1;
          label2.setText("  " + counter);
        } 
        
      } 
    }//ende von KeyPressed      
  
  
  public static void main(String[] args) {
    new zähler("zähler");
    
  } // end of main
  
} // end of class zähler
 
Zuletzt bearbeitet:
versuch doch mal das event von deinem event zu bekommen 😉 benutze, in deinem Fall e.getKeyCode()
laut der fehlermeldung steht bei dir auch KeyEvent.getKeyCode(). ich frage mich woher die Klassenmethode wissen soll, was einem Objeckt von seinem Typ als Objektparameter mitgegeben wurden 😀
 
Vielen Vielen Dank das war das Problem bei den Fehlermeldungen.

Eine Letzte Frage habe ich noch leider Gottes 🙁🙁. Und Zwar wenn ich das Programm starte kommen keine Fehlermeldungen mehr, aber er tut nichts wenn ich F12 drücke. hab schon ausprobiert es ausserhalb der Klasse zu schreiben(KeyLIstener
Hab ich was übersehen?
Mit KeyListener finde ich nichts wie ich das so zu sagen auslösen soll.




Müsste ich ihm nicht hier...

Java:
public static void main(String[] args) {
    new zähler("zähler");
    
    
    
  } // end of main

...sagen dass er jedesmal wenn ich eine Taste drücke zum keyPressed gehen soll?
Oder muss ich eine Schleife machen der bei jedem Durchgang den Keylistener aufruft???


Wenn man mir hier noch helfen könnte wäre ich unendlich dankbar.


Mfg Rotzglocke


ps: Hab leider wenig mit Java gemacht und vor allem noch nie mit KeyListener gearbeitet, deswegen muss ich so viel Fragen.

Pps: hab noch eimal den ganzen QUelltext als Anhang hinzugefügt.
 

Anhänge

Zuletzt bearbeitet:
Möchtest du die F12 Taste abfange, auch wenn das Fenster nicht aktiv, also der benutzer gerade in einem anderen Programm arbeitet? Dann kommst du mit den Standard Keyevents nicht weit. Sobald ein anderes Fenster im Vordergrund ist, funktionieren die Events nicht mehr.
 
als erstes muss das fenster den fokus besitzen, also einmal reinklicken kann wunder wirken. zum anderen, lass dir doch mal über ein System.out.println(); ausgeben, ob die methode überhaupt aufgerufen wird, unabhängig der gedrückten taste
 
Ah Ok, schade dass heißt also dass es noch einmal komplizierter wird bzw. ich mit meinem halbwissen hier nicht weiter komme oder? Weil es sollter schon im hintergrund laufen bzw. auf dem 2. bildschirm auftauchen während ich (oder mein Bekannter) auf de 1. mit seinen Sachen weiterarbeitet.
Wenn das hier nicht klappen sollte schon einmal ein riesen Dank an euch^^.
 
"Ah Ok, schade dass heißt also dass es noch einmal komplizierter wird bzw. ich mit meinem halbwissen hier nicht weiter komme oder?"

Da du scheinbar nicht mal in der Lage bist dir die nötigen Dinge selbst zu googlen ... ähm ... NEIN, DU selbst wirst hier alleine nicht weiter kommen.


"nebenbei zu erwähen dass das nur unter nem 32-Bit Java funktioniert (soweit ich weiß) und damit die platformunabhängigkeit verloren geht."

abhängig davon ob man eine 32bit oder 64bit DLL nutzt
zur not kann mans auch als SO und LIB compilen und so auch unter unix und mac nutzen ...
 
so, hab mich mal rangesetzt...
Java:
import javax.swing.JFrame;
import javax.swing.JLabel;

import de.stkiese.dflt.GermanKeyboardConverter;
import de.stkiese.events.GlobalKeyEvent;
import de.stkiese.interfaces.GlobalKeyListener;
import de.stkiese.logger.GlobalKeyLogger;

public class Haupt extends JFrame implements GlobalKeyListener{
	
	JLabel times = new JLabel();
	long t;
	GlobalKeyLogger gkl;
	
	public static void main(String[] args){
		try {
            System.loadLibrary("GlobalKeyLogger");
          }
          catch (UnsatisfiedLinkError ule) {
            ule.printStackTrace();
            System.load(".\\GlobalKeyLogger.dll");
            
          }
		
		new Haupt();
		
		
	}
	
	public Haupt(){
		gkl = new GlobalKeyLogger();
		gkl.addGlobalKeyListener(this);
		gkl.setConverter(new GermanKeyboardConverter());
		gkl.startListening();
		
		setSize(600,400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		add(times);
		setVisible(true);
	}

	@Override
	public void keyPressed(GlobalKeyEvent event) {
		if(event.getConverted().equals("[F12]")){
			++t;
			times.setText(""+t);
		}
		
		
	}
}
 

Anhänge

eine weitere (auch als 64bit verfügbare) lib wäre hier zu finden : Java ? Global (low level) Keyboard / Mouse Hook : Kristian Kraljic ? kra.lc
hab ich selbst ein paar mal genutzt ... ganz bequem
der native-loader ist stark an JNA angelehnt und so eigentlich direkt nutzbar (ggf einfach den loader-code aus JNA clonen und einfügen ... der läuft 100%)

@Chloroplatz : extends JFrame implements Listener ? die fehlen da aber einige grundlagen in sachen GUI und EventHandling
 
Habe mich wieder rann setzen können, da ich wenig zeit im Moment habe.

wenn ich die bat einfach stur ausführe vom GlobalKeylogger, dann meckert er, dass er kein 64 bit unterstützt. mache ich das mit 64-bit(-d64) kann er Haupt nit finden und wenn ich Haupt weg lasse kann er die .dll nicht laden, da es eine 32-bit ,dll ist und ich eine 64-bit .dll bräuchte. Google hat mir da nicht helfen können leider....


@chloro danke trotzdem für die mühe
 
wie gesagt, das läuft nur mit 32Bit java...

und was sprich dagegen einen Listener direkt im JFrame zu implementieren? Es verringert den aufwand, und ist bei der Größe dieses Programmes auch noch übersichtlich
 

Zurück
Oben