2011-08-30 21 views
8

SetEditable devre dışı bırakılırken JETextArea'ya nasıl Caret yerleştirebilirim?JTextArea show Ayarlanmışken setTictable değeri

ben görünür olmasını düzeltme işareti ihtiyacım Bir örnek kod:

public void run(){ 
    JFrame frame = new JFrame(); 
    JTextArea text = new JTextArea(); 
    text.setEditable(false); 
    String line = "added line"; 
    text.append(line); 
    text.setCaretPosition(text.getCaretPosition() + line.length()); 

    frame.getContentPane().add(text); 
    frame.setSize(300,300); 
    frame.setVisible(true); 
} 

Ne elde etmek istiyorum TextArea içinde kullanıcı türleri, karakterler görüntülenemiyor gerektiğinde, olmasıdır. Yazılan karakterler OutputStream öğesine yönlendirilir ve TextArea içinde görüntülenecek uygun InputStream alınır. Bu iyi çalışıyor, ancak Caret setEditable (false) nedeniyle gizlenmiş.

+0

metin ve metin alanını düzenleyemeyeceğinizi Bunu yapmalısınız ... Belki biraz daha fazla kod koyarsanız, sorun daha iyi görülebilir – Charliemops

+0

Çıktılar Hangi konu hakkında konuşuyorsunuz? Üzgünüm, amacını alamıyorum. – Charliemops

+0

Bu örnek bir koddur, nasıl TextArea oluşturduğumu göstermeye çalıştım. Sorun bu kodla da görülebilir, TextArea ile tek bir Frame çalıştırır, düzenlemeyi devre dışı bırakır ve String'i ekler, bu tamam, ancak Caret görünmüyor, nerede takılıyorum. – Tornike

cevap

12

text.getCaret().setVisible(true) ve/veya text.getCaret().setSelectionVisible(true)

+0

Teşekkürler, iyi çalışıyor :)) – Tornike

+0

+1 Her ikisi de çalışıyor. Benim çözümüm kirli bir hile, daha sonra seninkini kullan :) – Charliemops

2

Eh, burada çıkıntı işareti gösterir ama JTextArea düzenlemek izin vermeyin bir kod parçası koydu. Umarım size yardımcı olur. Metin alanının odaklandığı, odak elde edildiğinde, baskının devre dışı bırakıldığı küçük bir oyun; ama ne zaman o, baskı mümkün olduğunda. Bu şekilde, kullanıcı bunu düzenleyemez, ancak karetini görebilir.

public void run() { 
    JFrame frame = new JFrame(); 
    final JTextArea text = new JTextArea(); 
    text.addFocusListener(new FocusListener() { 

     public void focusLost(FocusEvent fe) { 
      text.setEditable(true);  
     } 

     public void focusGained(FocusEvent fe) { 
      text.setEditable(false); 
     } 
    }); 
    text.setEditable(true); 
    String line = "added line"; 
    text.append(line); 
    text.setCaretPosition(text.getCaretPosition() + line.length()); 

    frame.getContentPane().add(text); 
    frame.setSize(300,300); 
    frame.setVisible(true); 
} 

Bildirim kullanıcı düzeltme işaretini taşıyabilir, ama o/o diyorsunuz bunu yapmaz ben sadece (Windows 7'de) kodunuzu test