2011-12-19 15 views
5

Używam java, a ja próbuję zrobić JTextArea, który nie jest edytowalny, ale nadal ma karetkę w polu. Innymi słowy, obszar tekstowy, który nie wyświetla znaków wpisanych przez użytkownika, ale nadal ma migającą linię pomocniczą (to jest ostrość).Zachowaj ostrożność w obszarze TextArea, gdy nie można go edytować

Szczerze wpadłem na ten problem. Próbowałem się pieprzyć z setEditable, ale nie ma sposobu, aby zachować ostrożność. Próbowałem też usunąć znak wprowadzony przez użytkownika zaraz po jego wpisaniu, ale nie mogę przestać go migać na ekranie.

+0

uwaga: będziesz mógł mylić użytkowników - migający _caret_ (to termin techniczny dla markera :-) jest średnia trop wizualne są edytowalne – kleopatra

Odpowiedz

8

myślę dodaje pomoże Ci:

textArea.getCaret().setVisible(true); 

lub

textArea.getCaret().setSelectionVisible(true); 
+0

Cheers, działa idealnie –

+1

W przypadku, gdy chcesz przywrócić również kursor myszy, spróbuj 'textArea.setCursor (Cursor.getPredefinedCursor (Cursor.TEXT_CURSOR));' – gd1

1

chodzi o odpowiedzi powyższych

textArea.getCaret().setVisible(true); 

nie zawsze działa perfekcyjnie, jeśli TextArea lub EditorPane traci ostrość, mówiąc, że klikniesz na inną klatkę lub coś, kiedy wrócisz, kursor znowu będzie niewidoczny.

Miałem takie same problemy, wydaje się, że rozwiązaniem jest dodanie detektora skupienia i ustawienie go za każdym razem, gdy edytor zyskuje ostrość.

text.addFocusListener(new FocusListener() { 
    public void focusLost(FocusEvent e) { 
    return; 
    } 

    public void focusGained(FocusEvent e) { 
    text.getCaret().setVisible(true); // show the caret anyway 
    } 
}); 
+0

Musiałem dodać 'text.getCaret(). setVisible (true);' w moim słuchaczu, ponieważ ma go tylko w słuchacz focusowy nie zawsze działał (choć pomógł). Było to z Java 8 (jdk 1.8.0_25)/Mac OS X MountainLion. – nyholku

Powiązane problemy