Hallo.
Ich habe einer Textbox zwei KeyListener hinzugefügt. Einer agiert wenn eine Taste gedrückt wird und der andere wenn die Taste losgelassen wird. Über den Sinn und Zweck lässt sich streiten, aber ich bin noch auf keine andere Lösung gekommen.
Ein KeyListener überprüft ob Eingaben korrekt sind während der andere dazu da ist, mit den Pfeiltasten über Textboxen zu navigieren. Problem ist jetzt allerdings volgendes:
Ich habe Klassenvariablen angelegt die mit den Pfeiltasten so verändert werden, dass man über die Textboxen navigieren kann. Im zweiten KeyListener, der die Tasten überprüft, sollen diese Klassenvariablen z.b. bei dem drücken von Tab auch verändert werden... Dies geschieht allerdings nur temporär bis ich wieder die Pfeiltasten benutze...
Um das ganze rekonsturieren zu können:
Wenn ich mit den Pfeiltasten navigiere funktioniert alles wunderbar. Wenn ich mit Tab ein Feld weiter springe funktioniert es auch so weit ganz gut. Wenn ich anschließend dann mit der Pfeiltaste eine Zeile nach unten bzw. oben gehe springt der column-Wert wieder zurück auf den Wert den er vor dem Tab drücken hatte....
Ich habe einer Textbox zwei KeyListener hinzugefügt. Einer agiert wenn eine Taste gedrückt wird und der andere wenn die Taste losgelassen wird. Über den Sinn und Zweck lässt sich streiten, aber ich bin noch auf keine andere Lösung gekommen.
Ein KeyListener überprüft ob Eingaben korrekt sind während der andere dazu da ist, mit den Pfeiltasten über Textboxen zu navigieren. Problem ist jetzt allerdings volgendes:
Ich habe Klassenvariablen angelegt die mit den Pfeiltasten so verändert werden, dass man über die Textboxen navigieren kann. Im zweiten KeyListener, der die Tasten überprüft, sollen diese Klassenvariablen z.b. bei dem drücken von Tab auch verändert werden... Dies geschieht allerdings nur temporär bis ich wieder die Pfeiltasten benutze...
Code:
//Klassenvariablen row bzw column
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
key = 1;
if (row > 8)
row = 0;
else if (column < 0)
row = 0;
if (column > 8)
column = 0;
else if (column < 0)
column = 0;
matrix[row][column].requestFocus();
}
});
matrix[i][j].addKeyListener(new KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
if (key == 1){
if ((evt.getKeyCode() == KeyEvent.VK_1 || evt.getKeyCode() == KeyEvent.VK_2 ||
evt.getKeyCode() == KeyEvent.VK_3 || evt.getKeyCode() == KeyEvent.VK_4 ||
evt.getKeyCode() == KeyEvent.VK_5 || evt.getKeyCode() == KeyEvent.VK_6 ||
evt.getKeyCode() == KeyEvent.VK_7 || evt.getKeyCode() == KeyEvent.VK_8 ||
evt.getKeyCode() == KeyEvent.VK_9) ||
(evt.getKeyCode() == KeyEvent.VK_NUMPAD1 || evt.getKeyCode() == KeyEvent.VK_NUMPAD2 ||
evt.getKeyCode() == KeyEvent.VK_NUMPAD3 || evt.getKeyCode() == KeyEvent.VK_NUMPAD4 ||
evt.getKeyCode() == KeyEvent.VK_NUMPAD5 || evt.getKeyCode() == KeyEvent.VK_NUMPAD6 ||
evt.getKeyCode() == KeyEvent.VK_NUMPAD7 || evt.getKeyCode() == KeyEvent.VK_NUMPAD8 ||
evt.getKeyCode() == KeyEvent.VK_NUMPAD9)){
String input = ((TextField)evt.getSource()).getText();
if (input.length() > 1){
((TextField)evt.getSource()).setText(input.substring(0, 1));
((TextField)evt.getSource()).setCaretPosition(1);
JOptionPane.showMessageDialog(null,
"Es ist nur eine maximale Zeichenlänge\nvon 1 erlaubt!");
}
try{
int zahl = Integer.parseInt(((TextField)evt.getSource()).getText());
if(zahl == 0){
((TextField)evt.getSource()).setText("");
}
}catch(NumberFormatException e) {
((TextField)evt.getSource()).setText("");
}
}else if (evt.getKeyCode() == KeyEvent.VK_DELETE || evt.getKeyCode() == KeyEvent.VK_BACK_SPACE){
((TextField)evt.getSource()).setText("");
}else if (evt.getKeyCode() == KeyEvent.VK_ENTER){
lösen();
}else if (evt.getKeyCode() == KeyEvent.VK_SPACE){
inputtemp = ((TextField)evt.getSource()).getText();
((TextField)evt.getSource()).setText(inputtemp.substring(0, 1));
((TextField)evt.getSource()).setCaretPosition(1);
}else if (evt.getKeyCode() == KeyEvent.VK_TAB){
column++;
matrix[row][column].requestFocus();
}else if (evt.getKeyCode() == KeyEvent.VK_SHIFT){
if (evt.getKeyCode() == KeyEvent.VK_SHIFT && evt.getKeyCode() == KeyEvent.VK_TAB){
column--;
matrix[row][column].requestFocus();
}
}else{
JOptionPane.showMessageDialog(null,
"Falsche Eingabe!\nEs sind nur Zahlen zwischen 1 und 9\nmit einer Zeihenlänge
von einem Charakter\nerlaubt.");
((TextField)evt.getSource()).setText("");
}
}
key = 0;
}
});
Um das ganze rekonsturieren zu können:
Wenn ich mit den Pfeiltasten navigiere funktioniert alles wunderbar. Wenn ich mit Tab ein Feld weiter springe funktioniert es auch so weit ganz gut. Wenn ich anschließend dann mit der Pfeiltaste eine Zeile nach unten bzw. oben gehe springt der column-Wert wieder zurück auf den Wert den er vor dem Tab drücken hatte....