2011-08-30 11 views
8

setEditableが無効なときにJTextAreaにキャレットを挿入するにはどうすればよいですか?JTextAreaはsetEditableがfalseのときにキャレットを表示します

私が見えるようにキャレットを必要とするサンプルコード:

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); 
} 

私は何を達成したいことのTextArea内のユーザタイプは、文字が表示されてはならないとき、ということです。型付き文字はOutputStreamにリダイレクトされ、適切なInputStreamが受信され、TextArea内に表示されます。これは正常に動作しますが、setEditable(false)のためにキャレットは非表示になります。

+0

テキストおよびテキスト領域を編集することはできませんことをそれはしなければなりません...もっとコードを入れれば、問題は良くなるかもしれません。 – Charliemops

+0

あなたが話しているOutputStreamはどこですか?申し訳ありませんが、私はあなたの目標を得ることはありません。 – Charliemops

+0

これはサンプルコードで、TextAreaをどのように構築するかを示しています。問題はこのコードでも見えますが、TextAreaで単一のFrameを実行し、編集を無効にしてStringを追加しても問題ありませんが、Caretは表示されません。 – Tornike

答えて

12

text.getCaret().setVisible(true)および/またはtext.getCaret().setSelectionVisible(true)

+0

ありがとう、うまく:) :) – Tornike

+0

+1両方が動作します。私の解決策は汚れたトリックですが、あなたの方がいいです:) – Charliemops

2

まあ、私はここにキャレットを示したコードの断片を置くが、JTextAreaには編集させてください。それがあなたを助けることを願っていますそれは、テキストエリアの焦点を合わせて演じる小さなトリックです。フォーカスが得られたら、エディションは無効になります。しかし、それが解けば、それは可能です。このようにして、ユーザはそれを編集することができないが、キャレットを見ることができる。

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); 
} 

お知らせユーザーはキャレットを移動することができますが、彼/彼女はあなたの言うことを行っていない、私はちょうど(Windows 7の)あなたのコードをテスト

関連する問題