テキストエリアのキャレットの位置と色を設定する
キャレットとはテキストエリア内でテキストを入力する位置に表示されている縦棒のことです。ここではテキストエリアの中でキャレットの位置を設定する方法とキャレットの色を設定する方法について解説します。
(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)
キャレットの位置を設定する
テキストエリアを追加した場合、初期値を設定していな場合にはキャレットは先頭に表示されています。文字を入力するとキャレットに位置に入力した文字が表示され、キャレットは入力された文字の後ろに位置に移動します。連続で文字を入力するとこの繰り返しになりますので文字が順にテキストエリアに入力されていきます。
ただテキストエリアのオブジェクトを作成する時に初期値を設定した場合、キャレットの位置は初期値として入力されたテキストの最後ではなく、先頭の位置に設定されています。
このまま文字を入力すると初期値として設定したテキストの後ではなく、初期値のテキストの先頭のところに文字が挿入されていきます。
キャレットの位置は利用者がマウスやキーボードを使って移動できますしのでこのままで問題はないのですが、初期値の最後にキャレットがあった方が便利な場合もあります。このような場合にはキャレットの位置を設定することができます。キャレットの位置を設定するには JTextArea クラスの親クラスである JTextComponent で用意されている setCaretPosition メソッドを使います。
public void setCaretPosition(int position)
TextComponentのテキスト挿入キャレットの位置を設定します。 キャレットは変更を追跡するので、コンポーネントのベースとなるテキストが変更されるとこれも移動することに注意してください。 ドキュメントがnullの場合には何も行いません。 位置は0とコンポーネント・テキストの長さとの間でなければならず、そうでない場合は例外がスローされます。
パラメータ:
position - 位置
例外:
IllegalArgumentException - positionに指定した値が0未満、またはコンポーネント・テキストより長い場合
引数にはキャレットの位置を int 型の数値で指定します。文字の単位で何文字目の先頭にキャレットを配置するのかを指定して下さい。例えば先頭の文字の前に配置する場合は 0 、先頭の文字と 2 番目の文字の間に配置するなら 1 を指定します。
実際の使い方は次のようになります。
JTextArea textarea = new JTextArea("Hello!"); textarea.setCaretPosition(1);
上記の場合、キャレットは先頭の文字と 2 文字目の文字の間である "H" と "e" の間の位置に移動します。またテキストに改行文字である "\n" が含まれる場合、 "\n" も 1 文字とカウントされます。
入力されているテキストの最後の位置にキャレットを移動させたい場合は次のようになります。
JTextArea textarea = new JTextArea("Hello!"); textarea.setCaretPosition(textarea.getText().length());
textarea.getText() で入力されているテキストを取得し length() で取得したテキストの文字数を取得します。今回の場合は 6 となりますので、 6 番目の文字である "!" の後の位置(つまりテキストの最後の位置)にキャレットが移動します。
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample9_1.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JPanel; import java.awt.Container; import java.awt.BorderLayout; class JSample9_1 extends JFrame{ public static void main(String args[]){ JSample9_1 frame = new JSample9_1("MyTitle"); frame.setVisible(true); } JSample9_1(String title){ setTitle(title); setBounds(100, 100, 600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTextArea textarea = new JTextArea("Hello!\nBye.", 5, 40); textarea.setCaretPosition(textarea.getText().length()); JPanel p = new JPanel(); p.add(textarea); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); } }
次のようにコンパイルを行います。
javac JSample9_1.java
コンパイルが終わりましたら実行します。
java JSample9_1
テキストエリアに設定した初期値の最後にキャレットが移動しています。
キャレットの色を設定する
テキストエリアのキャレットの色を任意の色に設定することが可能です。キャレットの色を設定するには JTextArea クラスの親クラスである JTextComponent で用意されている setCaretColor メソッドを使います。
public void setCaretColor(Color c)
キャレットをレンダリングするのに使う現在の色を設定します。 これをnullに設定すると、効果的にデフォルトの色を復元します。 色を設定すると、PropertyChangeイベント(caretColor)が発生します。
パラメータ:
c - 色
引数にはキャレットの色として指定したいColorクラスのオブジェクトを指定します。Colorクラスについては「Colorクラス」を参照して下さい。
実際の使い方は次のようになります。
JTextArea textarea = new JTextArea("Hello!"); textarea.setCaretColor(Color.RED);
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample9_2.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JPanel; import java.awt.Container; import java.awt.BorderLayout; import java.awt.Color; class JSample9_2 extends JFrame{ public static void main(String args[]){ JSample9_2 frame = new JSample9_2("MyTitle"); frame.setVisible(true); } JSample9_2(String title){ setTitle(title); setBounds(100, 100, 600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTextArea textarea = new JTextArea("Hello!\nBye.", 5, 40); textarea.setCaretPosition(textarea.getText().length()); textarea.setCaretColor(Color.RED); JPanel p = new JPanel(); p.add(textarea); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); } }
次のようにコンパイルを行います。
javac JSample9_2.java
コンパイルが終わりましたら実行します。
java JSample9_2
キャレットの色が指定した色(赤色)に変更されていることが確認できます。
-- --
テキストエリアの中でキャレットの位置を設定する方法とキャレットの色を設定する方法について解説します。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。