テキストフィールドの編集可能/不可の切り替えおよび有効/無効の切り替え

テキストフィールドを一時的に編集できない状態に変更したり、無効な状態に変更することができます。編集できなくした場合は、テキストフィールドに新しいテキストを入力したり編集したりすることはできませんが既に入力済のテキストを選択してコピーすることはできます。無効にした場合はコピーすることもできません。ここではテキストフィールドの編集可能/不可の切り替えおよび有効/無効の切り替えを行う方法について解説します。

(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)

テキストフィールドの状態を変更する

テキストフィールドを編集不可な状態にするには JTextField クラスの親クラスである JTextComponent クラスで用意されている setEditable メソッドを使います。

public void setEditable(boolean b)

このTextComponentが編集可能かどうかを示す指定されたbooleanを設定します。 状態が変更されると、PropertyChangeイベント(editable)が発生します。

パラメータ:
b - 設定されるboolean

引数には編集可能かどうかを表す boolean 型の値を指定します。 true を指定した場合は編集可能となり、 false を指定した場合は編集不可となります。

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

JTextField text = new JTextField();
text.setEditable(false);

テキストフィールドの編集を不可にすると、テキストフィールドに新しいテキストを入力したり入力済みのテキストを編集たりといったことは行えませんが、入力済みのテキストを選択しコピーすることはできます。

-- --

またテキストフィールドを無効な状態にするには JTextField クラスの親クラスである JComponent で用意されている setEnabled メソッドを使います。

public void setEnabled(boolean enabled)

このコンポーネントが有効であるかどうかを設定します。 有効なコンポーネントはユーザーの入力に反応できますが、無効なコンポーネントはユーザーの入力に反応できません。 コンポーネントによっては、自身が無効な場合に表示を変更して、入力を受け取れないことを示すフィード・バックをユーザーに提供できます。

注: コンポーネントを無効化しても子は無効化されません。

注: 軽量化コンポーネントを無効化してもMouseEventは受信されます。

オーバーライド:
setEnabled 、クラス: Component

パラメータ:
enabled - このコンポーネントを有効化する場合はtrue、そうでない場合はfalse

引数には有効かどうかを表す boolean 型の値を指定します。 true を指定した場合は有効な状態となり、 false を指定した場合は無効な状態となります。

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

JTextField text = new JTextField();
text.setEnabled(false);

テキストフィールドを無効にすると、テキストフィールドに新しいテキストを入力したり入力済みのテキストを編集たりといったことは行えません。また入力済みのテキストを選択したりコピーしたりすることもできなくなります。

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample12_1.java という名前で保存します。

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.Container;
import java.awt.BorderLayout;

class JSample12_1 extends JFrame{
  public static void main(String args[]){
    JSample12_1 frame = new JSample12_1("MyTitle");
    frame.setVisible(true);
  }

  JSample12_1(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JTextField text1 = new JTextField("Sunday", 40);
    JTextField text2 = new JTextField("Sunday", 40);
    text2.setEditable(false);
    JTextField text3 = new JTextField("Sunday", 40);
    text3.setEnabled(false);

    JPanel p = new JPanel();
    p.add(text1);
    p.add(text2);
    p.add(text3);

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

次のようにコンパイルを行います。

javac JSample12_1.java

テキストフィールドの状態を変更する(1)

コンパイルが終わりましたら実行します。

java JSample1_12

テキストフィールドを 3 つ追加しました。 1 つ目はデフォルトのテキストフィールド、 2 つ目は編集不可に設定したテキストフィールド、 3 つ目は無効に設定したテキストフィールドです。

テキストフィールドの状態を変更する(2)

編集不可にしたテキストフィールドは、入力された内容を編集することはできませんが入力済みのテキストを選択することはできます。無効にしたテキストフィールドは入力済みのテキストを選択することもできません。

テキストフィールドの状態を変更する(3)

-- --

テキストフィールドの編集可能/不可の切り替えおよび有効/無効の切り替えを行う方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。