LoginSignup
0
1

More than 5 years have passed since last update.

TextFieldTableCell\<〇〇, Double\> 等のメモ

Last updated at Posted at 2014-09-13

環境

  • JavaFX 8

callbackの発火タイミング

commitEdit(Double newValue)

  • 入力中にEnterなどを押して「確定」した時

startEdit()

  • ダブルクリックなどで、入力モードに入った時
  • isEditting()はtrue

cancelEdit()

  • startEdit()をしたあと、「確定」しないで違うところをクリックするなどをして、キャンセルした時

updateItem(Double item, boolean empty)

  • viewに追加したように見えるとき
    • rowを追加した時
    • rowがいっぱいあって、スクロールした時
  • Editし、Enterなどを押して「確定」した時(入力の時は、少しRowが大きくなるからそれの見た目のupdateかと考える)
  • startEdit()の後(入力の時は、少しRowが大きくなるからそれの見た目のupdateかと考える)
  • 入力モードから確定し、commitEdit()の前
  • isEditting()はfalse

入力 -> 確定

ダブルクリック -> updateItem -> startEdit -> 入力 -> Enterを押す -> updateItem -> commitEdit

入力 -> キャンセル

ダブルクリック -> updateItem -> startEdit -> 入力 -> キャンセル -> cancelEdit

注意点

Doubleなので、setConverterをして上げる必要がある

方法

  • (方法1) this.setConverter(new DoubleStringConverter());
  • (方法2) DoubleStringConverterを継承した「MyDoubleConverter」を作成し、突っ込む

方法1だと、数値以外の文字を打つと、エンターが押せなくなる(正確にはDouble.valueOf(string)ができないやつのみ->NaNはいけてしまう)

方法2だと、fromString(String value)をOverrideすることで「ユーザが文字を入力し、Enterを押す」と強制的に「0.0」にするとかも可能

「全角の数字にも対応したい」「NaNを入力させたくない」なら、方法2で頑張る

commitEditをOverrideしてどっかのオブジェクトに値を代入している時に気をつけるべきこと

以下のようなコードの時、

Hoge.java
...
    @Override
    public void commitEdit(Double newValue) {
        super.commitEdit(newValue);
        this.foo = newValue;
    }
...

デフォルトだとstartEditが走った時、入力していたvalueが全て消えてそのままcancelすると、消えたままでcommitEditは走らない。
すぐ思いつくのはprevValueなどでとっておく。
startEdit()とcancelEdit()もOverrideする

Hoge.java
...
    @Override
    public void startEdit() {
        if (this.getText() != "") {
            this.prevValue = Double.valueOf(this.getText());
        }
        super.startEdit();
    }

    @Override
    public void cancelEdit() {
        super.cancelEdit();
        if (this.prevValue == null) {
            return;
        }
        this.setText(this.prevValue.toString());
    }
...
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1