入力テキストの中で指定部分を選択

広告

テキストフィールドに入力された値をプログラム側で選択状態にする方法を確認します。任意の部分を選択状態にするにはJTextFieldクラスの親クラスであるJTextComponentで用意されているselectメソッドを使います。

指定された始点と終点の間にあるテキストを選択します。

このメソッドは選択テキストの始点と終点を設定します。 始点は 0 以上でなければならないという
制約が適用されます。終点は始点と同じか、それより大きい値でなければならず、またテキストコン
ポーネントのテキストの長さに等しいか、それより短くなければいけません。

呼び出し側が一貫性のない値または境界外の値を指定した場合、メソッドはメッセージを表示せずに、
これらの制約を適用します。具体的には、始点または終点がテキストの長さを超える場合、テキスト
と同じ長さに設定し直します。始点がゼロより小さい場合、ゼロに設定し直します。終点が始点より
小さい場合、始点に設定し直します。

この呼び出しは、下位互換のために提供されています。これは、setCaretPosition の呼び出しに回
送され、それに moveCaretPostion の呼び出しが続きます。選択領域を管理する望ましい方法は、こ
れらのメソッドを直接呼び出すことです。 

パラメータ:
  selectionStart - テキストの始点
  selectionEnd - テキストの終点

1番目の引数に開始位置、2番目の引数に終点位置を指定してメソッドを呼び出すと、入力された値の中で指定した範囲を選択状態となります。位置の指定は先頭の文字の前が0、先頭の文字と2番目の文字の間が1となります。

実際の使い方は次のようになります。

JTextField text = new JTextField("初期値");
text.select(0, 1);

また選択する範囲の開始位置と終了位置を個別に指定することもできます。開始位置を指定するにはJTextFieldクラスの親クラスであるJTextComponentで用意されているsetSelectionStartメソッドを使います。

選択開始を、指定された位置に設定します。新しい先頭は、現在の選択領域の末尾かその前に限定さ
れます。

これは、このメソッドを java.awt.TextComponent で呼び出したコードに対する下位互換に役立ちま
す。これを実装すると、実際の選択領域が管理されている場所である Caret の実装に転送できます。

パラメータ:
  selectionStart - テキストの開始位置 >= 0

1番目の引数に開始位置を指定してメソッドを呼び出すと、選択状態の開始位置が指定した位置に変更されます。

終了位置を指定するにはJTextFieldクラスの親クラスであるJTextComponentで用意されているsetSelectionEndメソッドを使います。

選択領域の末尾を、指定された位置に設定します。新しい末尾は、現在の選択領域の先頭またはその
あとに限定されます。

これは、このメソッドを java.awt.TextComponent で呼び出したコードに対する下位互換に役立ちま
す。これを実装すると、実際の選択領域が管理されている場所である Caret の実装に転送できます。

パラメータ:
  selectionEnd - テキストの末尾位置 >= 0

1番目の引数に終了位置を指定してメソッドを呼び出すと、選択状態の終了位置が指定した位置に変更されます。

実際の使い方は次のようになります。

JTextField text = new JTextField("初期値");
text.setSelectionStart(0);
text.setSelectionEnd(1);

全てを選択

入力済みの全てのテキストを選択するためのメソッドも用意されています。全てを選択状態にするにはJTextFieldクラスの親クラスであるJTextComponentで用意されているselectAllメソッドを使います。

TextComponent 内のすべてのテキストを選択します。null または空のドキュメントでは何も行いま
せん。

メソッドを呼び出すと入力済みのテキストを全て選択状態にします。

実際の使い方は次のようになります。

JTextField text = new JTextField("初期値");
text.selectAll();

フォーカスの設定

テキストフィールドの作成と同時に選択状態を設定する場合は不要ですが、ボタンなどが押された時にテキストフィールドの一部または全部を選択するには、テキストフィールドにフォーカスが設定されていなければなりません。そこでJTextFieldクラスの親クラスであるJComponentで用意されているrequestFocusInWindowメソッドを使ってテキストフィールドにフォーカスを設定します。

この Component が入力フォーカスを取得することを要求します。このメソッドの詳細については、
Component.requestFocusInWindow() を参照してください。

戻り値:
  フォーカス変更要求が確実にエラーになる場合は false、成功する可能性がある場合は true

実際の使い方は次のようになります。

JTextField text = new JTextField("初期値");
text.requestFocusInWindow();
text.selectAll();

具体的な使い方は次のサンプルをご覧下さい。

サンプルプログラム

では実際に試してみます。

SSample11_1.java

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

class SSample11_1 extends JFrame implements ActionListener{

  JTextField text;

  public static void main(String args[]){
    SSample11_1 frame = new SSample11_1("タイトル");
    frame.setVisible(true);
  }

  SSample11_1(String title){
    setTitle(title);
    setBounds(100, 100, 300, 250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel p = new JPanel();

    text = new JTextField("住所", 20);
    text.select(0, 1);
    JButton button = new JButton("全て選択");
    button.addActionListener(this);

    p.add(text);
    p.add(button);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }

  public void actionPerformed(ActionEvent e){
    text.requestFocusInWindow();
    text.selectAll();
  }
}

ではコンパイルを行った上で実行してみます。

入力テキストの中で指定部分を選択

初期状態で0から1の範囲を選択状態に設定しています。

テキストフィールドに値を入力した後で「全て選択」ボタンを押すと、テキストフィールドに入力済みのテキストを全て選択状態します。

入力テキストの中で指定部分を選択

入力テキストの中で指定部分を選択

( Written by Tatsuo Ikura )