Kommandozeile

Status
Nicht offen für weitere Antworten.
M

mr1st

Gast
Hallo,

ich arbeite gerade an einem Zeichenprogram a la Autocad. Dazu möchte ich auch eine Kommandozeile implementieren, damit man die Objekte mittels Tastatureingabe sehr schnell zeichnen kann.

Ich hab's auch einigermaßen geschafft, nur sind leider einige Schönheitsfehler enthalten.

Mein Ansatz sind 2 JTextAreas, wobei die obere in einem JScrollpane liegt und nicht editierbar ist. Die zweite ist nur eine Zeile hoch und editierbar. Ich habe einen eigenen KeyListener geschrieben, dass wenn man die Enter Taste drückt der Text von der unteren Area zur oberen hinzugefügt wird (und später irgendwann der befehl ausgeführt wird). Weiters fange ich die Tabulatortaste. Diese dient dazu, um Befehle zu vervollständigen. Man tippt also nur einen Teil des Befehls ein, und sofern dieser eindeutig ist, wird der restliche Befehl automatisch hingeschrieben. Dies dient zur Beschleunigung der Eingabe.

Schönheitfehler:
1. Der Schiebebalken des Scrollpanes erstreckt sich nur über die obere JTextArea.
2. Ich musste eine eigene Methode schreiben, die mir nach Tabulatoren und Zeilenumbrüchen sucht und diese löscht. Wirklich schön ist sie nicht, da sie mit einiges if's und substrings funktioniert.
3. Die Tabs und Umbrüche werden trotz eigenem KeyListener trotzdem in den Text hinzugefügt.
4. Ich kann erst auf KeyReleased reagieren, damit das alles funktioniert
5. Wenn ich Enter drücke, ist die untere Eingabezeile so lange 2 Zeilen hoch, bis ich wieder die Enter-Taste loslasse. Dadurch entseht ein hüpfen des oberen Texts.
6. Ich muss genau in die untere Area hineinklicken, damit ich dort auch schreiben kann

Meine Fragen:
a. Irgendwelche Hinweise, das alles auszubessern?
b. Andere bessere Möglichkeit(en)?

Danke im voraus,

MfG
 
M

mr1st

Gast
Punkt 5 konnte ich soeben beheben. In der Methode keyTyped lösche ich jetzt immer alle Tabulatoren und Zeilenumbrüche. Die Eingabe hüpft also nicht mehr.

MfG
 

Wildcard

Top Contributor
1. ist ja auch klar wenn nur die obere Textarea in der Scrollpane liegt.
2. 3. 4. Wenn's dir nur um führende Leerzeichen und welche am schluß geht kannst du trim benutzen,
ansonsten würd ich RegEx vorschlagen.(Warum filterst du während der Eingabe, mach das doch am Schluss)

Warum nimmst du nicht JTextfield? Das ist immer nur eine Zeile hoch.
 
G

Gast

Gast
Ein JTextfield geht deshalb nicht, weil ich mit der Tabulatortaste den Fokus verliere und nicht mehr schreiben kann, sonst hätt ich eh eine.

Ich filtere Tabs und Zeilenumbrüche weg, Leerzeichen sind mir egal bzw. hab ich mit denen kein Problem.
Wenn aber zB die Enter Taste gedrückt wird, wird trotz allen Bemühungen ein Zeilenumbruch in der JTextArea gemacht, bis ich die Taste wieder auslasse (hier wird der Zeilenumbruch wieder entfernt, mit einer eigenen Methode). Auch wenn ich die Löschung des Zeilenumbruchs in der keyPressed Methode implementiere, hüpft's noch immer.

Ich hatte eine Lösung ohne Hüpfen, da hab ich bei jeder Eingabe in der keyTyped Methode sämtliche Zeilenumbrüche gelöscht, aber leider konnte ich den Text nur noch schwer editieren, da der Schreibcursor immer am Ende des Texts war. Daher musste ich das wieder raus nehmen.

MfG
 
M

mr1st

Gast
Ich hab's Hüpfen jetzt gelöst:

in der keyPressed Methode nachsehen, ob ENTER gedrückt wurde und darauf hin e.consume(); aufrufen.
Quelle: siehe hier

MfG
 

Wildcard

Top Contributor
währ aber auch einfacher gegangen:
Code:
myJTextField.setFocusTraversalKeysEnabled(false)
:wink:
 
M

mr1st

Gast
So, ich bin jetzt fertig.

Hat ganz schön gedauert, aber schließlich bin ich zufrieden.
Danke für eure Hilfe.

MfG
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Kommandozeile AWT, Swing, JavaFX & SWT 20

Ähnliche Java Themen

Neue Themen


Oben