直接値を入力できないように設定する

広告

スピナーではボタンを使って設定されている値を上下させる他に直接値を入力することも可能です。ここでは直接値を入力できないように設定する方法を確認します。

エディタに含まれるJFormattedTextFieldクラスのオブジェクトを取得し、そのオブジェクトに対して編集不可の設定を行います。JFormattedTextFieldクラスの親クラスであるJTextComponentクラスで用意されている「setEditable」メソッドを使います。 ※JFormattedTextFieldクラスについて詳しくは『JFormattedTextFieldクラス』を参照して下さい。

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

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

引数に編集を行えるかどうかを表すboolean型の値を設定します。編集不可にする場合は「false」を設定して下さい。

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

SpinnerDateModel model = new SpinnerDateModel();
JSpinner spinner = new JSpinner(model);

JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "yyyy.MM.dd");
spinner.setEditor(editor);

JFormattedTextField ftext = editor.getTextField();
ftext.setEditable(false);

サンプルプログラム

では簡単なサンプルを作成して試してみます。

JSpinnerTest20.java

import javax.swing.*;
import java.awt.Dimension;
import java.awt.BorderLayout;

public class JSpinnerTest20 extends JFrame{

  public static void main(String[] args){
    JSpinnerTest20 frame = new JSpinnerTest20();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  JSpinnerTest20(){
    SpinnerNumberModel model = new SpinnerNumberModel(2000, null, null, 100);
    JSpinner spinner = new JSpinner(model);

    JSpinner.NumberEditor editor = new JSpinner.NumberEditor(spinner, "#,##0");

    spinner.setEditor(editor);
    spinner.setPreferredSize(new Dimension(150, 25));

    JFormattedTextField ftext = editor.getTextField();
    ftext.setEditable(false);

    JPanel p = new JPanel();
    p.add(spinner);

    getContentPane().add(p, BorderLayout.CENTER);
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

スピナーで直接入力を不可に設定する

直接値を入力は出来なくなっていますが、ボタンをクリックすることで値を上下させることは出来ます。

スピナーで直接入力を不可に設定する

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)