"setCaretPosition" klappt nicht immer

vfl_freak

Premium-User
Hallo zusammen,

in meinem Programm gibt es einen sog. Notizbuch-Dialog, der direkt nach dem Programmstart automatisch angezeigt wird, aber später auch per Button oder ShortCut aufrufbar ist.
Das jeweils Anzeigen klappt auch soweit gut!
Nun sollte ich in beiden Fällen den Fokus auf das Textfeld richten und den Cursor hinter das letzte Textzeichen setzen.

Im ersten Fall wird der Dialog dann so erzeugt und angezeigt:
Java:
dlgN = new DlgNotizbuch( this, "Notizbuch für Bediener " + strBenutzerKQT, Config.getInstance(), false, true );
if (dlgN != null) 
{
    dlgN.readNotizbuchText();
        if( !dlgN.isNotizbuchEmpty() ) 
        {
          int iLen = dlgN.jTextAreaNotizbuch.getText().length();
            dlgN.jTextAreaNotizbuch.setCaretPosition( iLen-1 );
            dlgN.jTextAreaNotizbuch.requestFocus( );
            dlgN.setVisible(true);
        } 
}
Das klappt auch wunderbar! Ich sehe den geladenen Text und mein Cursor blinkt sich hinter dem letzten Zeichen einen Wolf .... ;-]

Rufe ich nun später den Dialog über den Button oder den ShortCut (hier wird dann "btnNotizbuch.doClick();" ausgeführt) auf, dann sehe ich zwar den Text, aber leider keinen Cursor und der Fokus scheint auch gesetzt zu sein ...

Hier der Code des entspr. "actionPerformed":
Java:
public void btnNotizbuch_actionPerformed(ActionEvent e) 
{
    if (dlgN != null) 
    {
        dlgN.jTextAreaNotizbuch.setText("");
         dlgN.readNotizbuchText();
         if( !dlgN.isNotizbuchEmpty() ) 
         {
             int iLen = dlgN.jTextAreaNotizbuch.getText().length();
             dlgN.jTextAreaNotizbuch.setCaretPosition( iLen-1 );
             dlgN.jTextAreaNotizbuch.requestFocus( );
        } 
         else 
         {
                 dlgN.jTextAreaNotizbuch.setCaretPosition( 0 );
                 dlgN.jTextAreaNotizbuch.requestFocus();
        }
        dlgN.setVisible(true);
      }
} // btnNotizbuch_actionPerformed

Lt. Debugger läuft das Programm sauber durch die jeweiligen cases durch, nur wird eben im zweiten Fall weder der Fokus noch das Caret gesetzt ....

Hat jemand eine Idee, was ich hier falsch mache ?
Oder habe ich irgendwas vergessen :-(

Danke und Gruß
Klaus

BTW: ich nutze den JBuilder 2007 ....
 
Moin,

habe es jetzt mit "requestFocusInWindow" anstatt "requestFocus" versucht und dabei auch den bool'schen Rückgabewert abgefangen!

Er steht leider eindeutig auf "false" .....

Aber auch wenn dieser Dialog/diese Komponente mittlerweile durch andere Aktionen den Fokus verloren hat, wieso kann ich ihn dann nicht neu setzen ? ?

Es macht doch nach meiner Meinung auch keinen wirklichen Sinn, jedesmal das Dialog-Objekt zu plätten und neu aufzurufen, oder ?

Gruß
Klaus
 
tja, wenn ich den Dialog jedesmal nach dem Schließen plattmache (statt "setVisible(false)") und dann beim Aufruf über Button oder ShortCut neu erzeuge (neu einlesen musste ichja eh' ...), dann wird auch der Fokus und der Cursor richtig gesetzt :suspekt:

na, dann lassen wir es erstmal so .....

Gruß
Klaus
 
Zurück