Tastenabfrage in JFrame?

Kai008

Erfahrenes Mitglied
Hi, ich habe mir gerade ein kleines JFrame mit 90 JLabels und 10 JTextFields geschrieben.
Nur leider funktionierte der KeyListener nicht. Google hat mir verraten das dass daran liegt dass das JFrame keinen Focus mehr hat wenn man in ein JTextField klickt. Ich will aber ein Programm schreiben wo es vor allem auf die Arbeitsgeschwindigkeit ankommt, weshalb ich keine Buttons haben will. (Vergleichsweiße mieserable Zugriffszeiten.)
So will ich z. B. das wenn man Enter drückt er ins nächste Textfeld springt und den Inhalt markiert.
Das habe ich bereits (Google sei dank) geschafft:

Code:
public void actionPerformed (ActionEvent a)
{
	if(a.getSource() == Text1)
	{
    		Text2.selectAll();
    		Text2.requestFocus();
        } 
	...
}

Aber jetzt würde ich gerne mehr Tasten einbauen.
Unter anderem die F's um schnell zwischen JFrames umzuschalten, ESC um zurückzugehen, linke Pfeiltaste um das letzte JTextField auszuwählen falls es doch mal zu einen Fehler kommt und Space um das momentane JTextField zu markieren.
Die Inhalte sind kein Problem, ich finde nur einfach keine Suchergebnisse, wenn es darum geht die Tasten einzubauen bzw. ihre Funktion in den JTextFields zu speeren.

Kann mir bitte wer sagen wie das geht?
 
Danke.
Dein "gelten nur für die Komponente die den Fokus hat." hat mich auf 2 Ideeen gebracht, die leider nicht funktionierten. ^^
1. Wollte ich versuchen den KeyLogger auf die JTextFields registrieren, ging leider nicht, auch wenn ich das TextField zu einer "KeyLogger-Variable" gecastet habe.
2. Wollte ich eine Endlosschleife starten die prüft welches TextField den Focus hat, dann den Focus an das JFrame, also "this" übergeben und sofort wieder an das TextField übergeben, damit das JFrame in der Zeit Tastendrücke annehmen kann. Das hat aber das ganze Projekt so ausgebremst, das ich das JFrame auf einen anderen JFrame nichtmal .setVisible(true); schalten konnte.

Den Quick Start Guide von JIntellitype verstehe ich irgendwie nicht. Ich habe die dll in System32 kopiert, aber wie soll man dann "JIntellitype.getInstance();" verwenden? Java weiß doch garnicht was JIntellitype ist, das muss man doch vorher als Variable oder ähnliches deklarieren, oder?

Ach ja, tut mir leid das ich nicht in DAS Unterforum gepostet habe, wusste aber nicht was "Rich Client Entwicklung" ist.
 
Zuletzt bearbeitet:
Steht doch in der Beschreibung vom Forum drin :)

Zu JIntellitype: Du brauchst noch das Jar, dass muß im Classpath liegen. Ist fürn Anfang vielleicht ein wenig kompliziert, aber sowas muß man später dauernd machen also kannst dir das ruhig mal anlesen.

Womit entwickelst du denn zur Zeit?
 
Eclipse IDE for Java Developers 3.3.2.
Ich habe mal versucht die Jar per scr -> Properties -> New -> Java Application -> Classpath -> User Entries -> Add JARs einzubinden, hat aber leider nichts gebracht.
 
Okay eclipse kann ich dir erklären:
Lege zwei Ordner in deinem bestehen Java-Projekt an:
- lib
- dll

In Lib legst du das Jar. In dll die dll.

Dann machst du rechtsklick auf dem Jar und wählst Build Path - Add to Build Path. Es sollte nun unter "Referenced Libraries" auftauchen.

Dann kannst du das ganze so verwenden indem du
import com.melloware.jintellitype.*;
in deiner/n Klassen hinzufügst.

Wenn du dein Programm mit Run - Run As - Java Application laufen läßt dann wird es beim ersten Mal sicher nicht gehen weil er die dll nicht findet.

Run - Open Run Dialog - Arguments - VM Arguments
-Djava.library.path=dll
eintragen.

Dann nochmal laufen lassen. Nun sollte er auch die dll finden. (Man muß sie so nicht nach System32 legen).
 
Danke.
Aber jetzt bekomme ich wenn ich JIntellitype.getInstance(); benutze dem Fehler "Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory"

Und die Jar ist in Eclipse aus dem Ordner "lib" im Package Explorer verschwunden, obwohl sie lokal drinnenliegt.
 
Das ist in Ordnung. Du benötigst noch zwei weitere Jars: Commons logging und log4j. Solltest du so finden können.
 
OK, habe die Common s Logging und Log4j im Build-Pfad inklutiert.
Ich glaube langsam funktioniert es.

log4j:WARN No appenders could be found for logger (com.melloware.jintellitype.JIntellitype).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "AWT-EventQueue-0" com.melloware.jintellitype.JIntellitypeException: java.lang.UnsatisfiedLinkError: no JIntellitype in java.library.path
Caused by: java.lang.UnsatisfiedLinkError: no JIntellitype in java.library.path
 
Mach mal am Anfang deines Codes ein:
BasicConfigurator.configure();

Dann Strg+Shift+O und wähl das ding von log4j aus.

Hast du das mit dem -Djava.library.path eingestellt?
 

Neue Beiträge

Zurück