Fokus mit Maus und Tastatur

Status
Nicht offen für weitere Antworten.

manuche

Bekanntes Mitglied
Hi!
Ich habe in einer Schleife alle meine Textfelder deklariert. Jedes Textfeld besitzt einen Actionlistener der dafür sorgt, dass man mit den Pfeiltasten über die Textfelder navigieren kann. Wenn ich allerding mit der Maus in ein Feld klicke bleibt er nur für eine Eingabe in diesem Feld, sobald ich was anderes drücke ist der Fokus wieder auf dem ursprüngichen Feld. Ich habe es schon mit einem MouseListener probiert was allerdings nicht funktioniert hat...

Code:
    for (int i = 0; i < 9; i++){
      for (int j = 0; j < 9; j++){
        matrix[i][j] = new TextField();
        matrix[i][j].setFocusTraversalKeysEnabled(false);
        matrix[i][j].addKeyListener(new KeyAdapter() {
          public void keyPressed(KeyEvent evt) {
            if (evt.getKeyCode() == KeyEvent.VK_UP){
              row--;
            }else if (evt.getKeyCode() == KeyEvent.VK_DOWN){
              row++;
            }else if (evt.getKeyCode() == KeyEvent.VK_LEFT){
              column--;
            }else if (evt.getKeyCode() == KeyEvent.VK_RIGHT){
              column++;
            }

            if (row > 8)
              row = 0;
            else if (row < 0)
              row = 8;
            if (column > 8)
              column = 0;
            else if (column < 0)
              column = 8;

            matrix[row][column].requestFocus();
          }
        });

und so sah es mitm MouseListener aus:

Code:
        matrix[i][j].addMouseListener (new MouseAdapter(){
          public void mousePressed(MouseEvent evt){
            for (int a = 0; a <= 8; a++){
              for (int b = 0; b <= 8; b++){
                if (matrix[a][b].isFocusOwner()){
                  row = a;
                  column = b;
                }
              }
            }
          }
        });
.
.
.
Intuition dabei war heraus zu finden wo der Cursor grad steht und sich dann a und b zu merken...
Wüsste jemand, wie man es anders lösen könnte?
 

wayne

Bekanntes Mitglied
also ich denke, das problem ist, daß du grundsätzlich, egal welche taste gedrückt wird, immer von einem deiner textfelder requestFocus() aufrufst. ich würde hier empfehlen zunächst abzuprüfen ob einer der "focus-traversal-tasten" gedrückt wurde und sollte dies nicht der falls sein, deine methode des keylisteners zu verlassen. sprich mach folgendes:
Code:
if (evt.getKeyCode() == KeyEvent.VK_UP){ 
    row--; 
}else if (evt.getKeyCode() == KeyEvent.VK_DOWN){ 
    row++; 
}else if (evt.getKeyCode() == KeyEvent.VK_LEFT){ 
    column--; 
}else if (evt.getKeyCode() == KeyEvent.VK_RIGHT){ 
    column++; 
}
else return;

zu deiner frage, nach einer anderen lösung: ich halte das ganze für äusserst notdürftig programmiert. will sagen, es mag funktionieren, jedoch ist das nicht der weg, wie sun es vorschlägt. im SDK gibt es für die kontrolle des focus die sogenannte FocusTraversalPolicy. die kannst du selbstverständlich überschreiben und darin dann entsprechend entscheiden, welches die nächste Component sein soll, die den focus erhält. das wäre dann der standard weg. eine andere methode wäre es, die Action auszutauschen, welche ausgelöst wird, wenn man in einem TextField die tabulator-taste drückt bzw. diese zu entfernen und dafür selbstgeschriebene Actions für die cursortasten zu registrieren. muss dabei aber anmerken, daß ich es für fatal halte die linke und rechte cursortaste mit traversalfunktionen zu versehen, da man die normalerweise und selbstverständlich auch aus gewohnheit zum editieren einsetzt. vielleicht wäre eine kombination mit der steuerungstaste für den nutzer schlüssiger. am besten dann, wenn nebenbei die tabulatortaste immer noch ihre gewohnte traversalfunktion behält.

viel erfolg

wayne
 

manuche

Bekanntes Mitglied
Also ich hab zwar Mühe den unteren Block nachvollziehen zu können aber er wird soviel bedeuten wie: mach dir keine eigene navigation!!!
Also mit den Pfeiltasten funktioniert es wunderbar nur bekommt er nicht mit auf welchem feld sich der cursor nach dem mousclick befindet... hab das return eingefügt und er macht mehr als vorher aber leider springt er immernoch "merkwürdig" über die Felder!
Eigene Navigation wäre schön bei nem Sudokusolver mit 81 Feldern ;)

Habs geschafft... Es hätte einfach nur MouseClicked statt MousePressed heissen müssen... Das return würde dann auch keine große Rolle spielen... Vor der Abfrage ändert sich ja eh kein Wert und es wird nicht neu positioniert:

Code:
    for (int i = 0; i < 9; i++){
      for (int j = 0; j < 9; j++){
        matrix[i][j] = new TextField();
        matrix[i][j].setBounds(l, k, 25, 25);
        matrix[i][j].setFocusTraversalKeysEnabled(false);
        matrix[i][j].addMouseListener (new MouseAdapter(){
          public void mouseClicked(MouseEvent evt){
            for (int a = 0; a <= 8; a++){
              for (int b = 0; b <= 8; b++){
                if (matrix[a][b].isFocusOwner()){
                  row = a;
                  column = b;
                }
              }
            }
          }
        });
        matrix[i][j].addKeyListener(new KeyAdapter() {
          public void keyPressed(KeyEvent evt) {
            if (evt.getKeyCode() == KeyEvent.VK_UP){
              row--;
            }else if (evt.getKeyCode() == KeyEvent.VK_DOWN){
              row++;
            }else if (evt.getKeyCode() == KeyEvent.VK_LEFT){
              column--;
            }else if (evt.getKeyCode() == KeyEvent.VK_RIGHT){
              column++;
            }else{
              inputkey = true;
              return;
            }

            if (row > 8)
              row = 0;
            else if (row < 0)
              row = 8;
            if (column > 8)
              column = 0;
            else if (column < 0)
              column = 8;

            matrix[row][column].requestFocus();
          }
        });
 

wayne

Bekanntes Mitglied
ok, verstehe, was du machen willst. ich persönlich hätte vielleicht eher JLabel als darstellung der zahlen gewählt und das dann focus-enable gemacht, sodaß man eines fokussieren kann und, sobald man eine ziffer drückt, der text des JLabel entsprechend geändert wird. so hätte man niemals den gedanken, mit den cursortasten in einem feld zwischen den charactern hin- und her zu springen.

aber egal. bleiben wir bei deiner geschichte hier.

schreib doch mal, rein zur sicherheit und zum debuggen nach dem ganzen if-zeuchs vor dem matrix[row][column].requestFocus(); ein System.out.println in deine keyPressed(...)-methode und überprüfe so den fehlerfall, welche taste eigentlich grade dazu führt, daß der focus weitergegeben wird bzw. welchen inhalt row und column zu diesem zeitpunkt haben. versuche vielleicht abschließend dann nachzuvollziehen, warum das so ist. denn aus dem bestehenden code kann ich so jetzt keinen fehler erkennen.

viel glück

wayne
 

wayne

Bekanntes Mitglied
klasse, wenn's jemand auch ohne hilfe schafft *schulterklopf*

ich empfehl dir auszuprobieren, obs mouseReleased(...) auch tut, denn mouseClicked(...) springt nach meiner erfahrung nicht immer an.

wünsche weiterhin frohes gelingen

wayne
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Java Applikation im Fokus halten Java Basics - Anfänger-Themen 3
J Keyboard Event auch ohne Fokus mitbekommen Java Basics - Anfänger-Themen 2
N Problem mit JOptionPane und Fenster-Fokus Java Basics - Anfänger-Themen 2
N Fokus setzen nachdem JFrame in Vordergrund geholt wurde Java Basics - Anfänger-Themen 7
S JTable Fokus auf eine Row Java Basics - Anfänger-Themen 2
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
Z Fokus auf anderes Programm setzen Java Basics - Anfänger-Themen 3
C JPanel erhält sporadisch keinen Fokus Java Basics - Anfänger-Themen 3
A Fokus im Passwortfield Java Basics - Anfänger-Themen 3
T Fokus Java Basics - Anfänger-Themen 4
Z Auf Clipboardänderung reagieren ohne Fokus der Apllikation Java Basics - Anfänger-Themen 2
G Tastenfunktion ohne Fokus? Java Basics - Anfänger-Themen 4
B Fokus für JFrame Java Basics - Anfänger-Themen 5
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
E keyListener(Fokus?) H I L F E Java Basics - Anfänger-Themen 2
D Fokus ohne anklicken? Java Basics - Anfänger-Themen 4
A Fokus erhalten Java Basics - Anfänger-Themen 3
B Fokus auf ein Textfeld setzen? Wie? Java Basics - Anfänger-Themen 8
H Fokus auf jTextfield setzten Java Basics - Anfänger-Themen 2
D Fokus-Problem mit KeyListener Java Basics - Anfänger-Themen 2
L GUI - Tastaturereignisse abfangen ohne Fokus? Java Basics - Anfänger-Themen 8
D Problem mit dem Fokus Java Basics - Anfänger-Themen 3
E Isometrische Tileauswahl mit der Maus Java Basics - Anfänger-Themen 1
CptK Klassen Event bei gedrückter Maus immer wieder mit Pause ausführen Java Basics - Anfänger-Themen 2
CptK Klassen mouseClicked wird nicht aufgerufen, während man die Maus bewegt Java Basics - Anfänger-Themen 4
D Wie frage ich ab ob die Linke maus Taste gedrückt wurde? Java Basics - Anfänger-Themen 3
M Graphics2D Objekt mir der Maus erstellen Java Basics - Anfänger-Themen 5
T Zur Maus zoomen / Fehler bei Bilddarstellung Java Basics - Anfänger-Themen 3
J GridPane per Maus Zelle bekommen, wie? Java Basics - Anfänger-Themen 4
N Erkennen ob Linkshänder Maus Java Basics - Anfänger-Themen 4
C [Greasmonkey] Maus Coursor position setzen Java Basics - Anfänger-Themen 1
S Maus soll Programm nicht verlassen Java Basics - Anfänger-Themen 1
P mousevents bei Maus und touchscreen reagieren unterschiedlich Java Basics - Anfänger-Themen 1
X Weg der Maus in px Java Basics - Anfänger-Themen 1
L Maus Click Simulation Java Basics - Anfänger-Themen 5
J Windows Maus-Zeigerbeschleunigung aktivieren/deaktivieren - Mit Java möglich? Java Basics - Anfänger-Themen 2
S Maus Position Java Basics - Anfänger-Themen 6
S java ruckelnde maus Java Basics - Anfänger-Themen 8
E Y-Position der Maus nehmen Java Basics - Anfänger-Themen 5
K Bild mit Maus innerhalb eines Rahmens bewegen Java Basics - Anfänger-Themen 5
T problem mit der maus in BlueJ Java Basics - Anfänger-Themen 14
Nicer Maus Events Java Basics - Anfänger-Themen 2
J SuM.kern.Maus gibt null obwohl initialisiert Java Basics - Anfänger-Themen 3
J den x und y Wert beim klicken der Maus ermitteln Java Basics - Anfänger-Themen 2
R Objekt mit Maus auswählen und verschieben Java Basics - Anfänger-Themen 2
S Koordinaten der Maus wiedergeben Java Basics - Anfänger-Themen 6
B GridLayout - elemente mit Maus abfragen Java Basics - Anfänger-Themen 3
Hamstinator Fenster mit Maus verschieben Java Basics - Anfänger-Themen 2
B Hilfe: Tastatureingaben werden erst nach der Maus angenommen Java Basics - Anfänger-Themen 3
C Scroll per Maus Java Basics - Anfänger-Themen 2
O Maus / Pixel Position bei mir und bei anderen. Java Basics - Anfänger-Themen 8
B träge Maus Java Basics - Anfänger-Themen 2
H2SO3- dreieck, bild --> maus klick event. Wie gehts? Java Basics - Anfänger-Themen 10
F Maus fangen Java Basics - Anfänger-Themen 9
A grafik 2d Objekte mit der Maus bewegen Java Basics - Anfänger-Themen 4
H Objekt mit Maus verschieben Java Basics - Anfänger-Themen 4
A Maus positionserkennung zu langsam Java Basics - Anfänger-Themen 4
G Maus mit java bewegen Java Basics - Anfänger-Themen 6
N Applet ruckelt solange Maus nicht in Bewegung? Java Basics - Anfänger-Themen 3
M Maus position abfragen und setzen? Java Basics - Anfänger-Themen 1
G nicht Quadratischer Maus-Klickbereich Java Basics - Anfänger-Themen 6
T eine zusätzliche Virtualle Maus Java Basics - Anfänger-Themen 11
E Mit der Maus Zeichenen Java Basics - Anfänger-Themen 5
DEvent Maus deaktivieren und exklusiv nur für das Hauptfenster Java Basics - Anfänger-Themen 5
E Kreis in Frame ,den man mit der Maus versetzen kann? Java Basics - Anfänger-Themen 2
B Button - auf Maus reagieren Java Basics - Anfänger-Themen 16
G Buttons mit der Maus nicht anklickbar Java Basics - Anfänger-Themen 8
B Probleme mit der maus Java Basics - Anfänger-Themen 4
M Maus und Tastatur Java Basics - Anfänger-Themen 5
G Maus+Tastatur aktionen simulieren? Java Basics - Anfänger-Themen 5
D Maus steuern Java Basics - Anfänger-Themen 9
Xaver code Tastatur ausgabe Java Basics - Anfänger-Themen 4
S Tastatur input lesen Java Basics - Anfänger-Themen 7
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
T Tastatur mit robot ß ^ und @ simulieren Java Basics - Anfänger-Themen 4
N Tastatur simulieren Java Basics - Anfänger-Themen 4
T Tastatur angeschlossen? Java Basics - Anfänger-Themen 3
V Tastatur initialisieren JFrame Probleme Java Basics - Anfänger-Themen 6
H Tastatur.wurdeGedrueckt() macht nicht das, was ich will :/ Java Basics - Anfänger-Themen 2
T relais über virtuelle tastatur ansprechen Java Basics - Anfänger-Themen 6
S Text über Tastatur eingeben und ausgeben Java Basics - Anfänger-Themen 6
S Tastatur zuweisungen Java Basics - Anfänger-Themen 3
F Frage zu amerikanischer Tastatur Java Basics - Anfänger-Themen 9
E Tastatur Java Basics - Anfänger-Themen 3
P Tastatur funktioniert nicht Java Basics - Anfänger-Themen 4
E auf Tastatur reagieren Java Basics - Anfänger-Themen 8
D Datentypen SUM-Kern Tastatur Hotkey Java Basics - Anfänger-Themen 2
H Problem mit Tastatur Befehl Java Basics - Anfänger-Themen 11
P Eingabe von Tastatur Java Basics - Anfänger-Themen 4
P Problem mit der Tastatur Java Basics - Anfänger-Themen 31
G Strings von Tastatur einlesen und in ArrayList speichern Java Basics - Anfänger-Themen 12
Spin Von der Tastatur einlesen grafisch Java Basics - Anfänger-Themen 2
T Tastatur Tasten Senden Java Basics - Anfänger-Themen 4
Misti Eingabe Tastatur bzw. Datei Java Basics - Anfänger-Themen 6
G Zu Laufzeit von Tastatur einlesen Java Basics - Anfänger-Themen 11
S Von der Tastatur eingelesene Strings miteinander vergleichen Java Basics - Anfänger-Themen 4
J Tastatur-Puffer leeren Java Basics - Anfänger-Themen 3
A JTable nimmt eingaben von tastatur nicht an? Java Basics - Anfänger-Themen 2
M Tastatur.leseZahl(); geht nicht in Methoden ? Java Basics - Anfänger-Themen 3
M Eclipse --> Befehl: "Tastatur.leseKommazahl();" Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben