"setAccelerator/KeyStroke" bei JTextArea ?

vfl_freak

Premium-User
Hallo zusammen,

ich soll in einem von JDialog abgeleiteten Dialog bei der Texteingabe einige Tasten-/Tastenkombinationen für spezielle Aktionen auswerten.

So wird derzeit bspw. die Enter-Taste überschrieben, was auch prima funktioniert :
Java:
if( e.getKeyCode() == KeyEvent.VK_ENTER )
{
	if( rbAusfuellen.isSelected() )
	{
	     e.setKeyCode( KeyEvent.VK_DOWN );
        }
}

Jetzt sollte eine weitere spezielle Funktion für die Tastenkombi <Shift><Enter> einbauen, was ich (wie üblich) über einen Accelerator lösen wollte :
Java:
jTextAreaKQT.setAccelerator(javax.swing.KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.SHIFT_MASK));

Leider musste ich zur Kenntnis nehmen, dass diese Methode für JTextArea nicht definiert ist .... :rolleyes:

Habe ich hier irgendeine andere Möglichkeit :confused:
IMHO bringt es ja nichts, wenn ich die KeyEvents für Shift und Enter nacheinander abfrage, oder ?

Danke im voraus ;)
Gruß
Klaus
 
Moin,

oh, das klingt gut - die Methode kannte ich noch nicht :suspekt:

Werd's gleich mal austesten!

Danke und Gruß
Klaus
 
Moin,

hmm, schade ... der Effekt, den ich erzielen wollte, klappt leider noch nicht so ganz ...
Aber vlt. sollte ich auch besser dabei schreiben, was ich genau machen soll :p

In dem Dialog wird eine Textvorlage vorgeblendet, die dann vom Anwender weiter ausgefüllt werden muss.
Nun ist es der spezielle Wunsch meines Chefs, dass für den normalen Anwender beim Betätigen von ENTER statt den Einfügen einer neuen Zeile einfach nur der Cursor eine Zeile tiefer wandern soll (was auch problemlos klappt). Da er nun aber erkannt hat, dass dadurch nie neue, event. benötigte Zeilen eingefügt werden können, haben wir uns darauf geeinigt, dass eine neue Zeile mit SHIFT+ENTER eingefügt wird !

Allerdings klappt folgendes nicht :
Java:
	public void jTextAreaKQT_keyPressed( KeyEvent e ) 
	{ 
		if( (e.getKeyCode()==KeyEvent.VK_ENTER) && !e.isShiftDown() )
		{
			if( rbAusfuellen.isSelected() )
			{
				e.setKeyCode( KeyEvent.VK_DOWN );  // das klappt wunderbar :-)
			}
		}
                else if( (e.getKeyCode()==KeyEvent.VK_ENTER) && e.isShiftDown() )
		{
			e.setKeyCode( KeyEvent.VK_ENTER ); // hierauf erfolgt überhaupt keine Reaktion :-(
		}
	} // jTextAreaKQT_keyTyped
Auch ohne den else-Fall erfolgt keine Reaktion !

Habe ich irgendeine andere Chance, hier (von mir aus mit einer anderen Taste, bspw. VK_F2) eine neue Zeile einfügen - sprich das KeyEvent VK_ENTER anzstossen ?

Danke und Gruß
Klaus


Danke und Gruß
Klaus
 
ah - eine (vlt. etwas schmutzige) Lösung sieht so aus :
Code:
if( (e.getKeyCode()==KeyEvent.VK_ENTER) && !e.isShiftDown() )
{
    if( rbAusfuellen.isSelected() )
    {
        e.setKeyCode( KeyEvent.VK_DOWN );
    }
}
else if( (e.getKeyCode()==KeyEvent.VK_ENTER) && e.isShiftDown() )
{
    int iPos = jTextAreaKQT.getCaretPosition( );
    jTextAreaKQT.insert( "\n", iPos );
}

Ok, hat sich damit erledigt ;)

Gruß
Klaus
 

Neue Beiträge

Zurück