Javaプログラミング/Javaプログラミング関連情報

バインドとモデルクラス(3ページ目)

今回は、「バインド」というテクニックを使って、ウィジェットのアトリビュートをオペレーションから操作してみましょう。

執筆者:掌田 津耶乃

オペレーションをクラスに追加する


さて、先ほどはactionにそのままオペレーションを用意していましたが、やはり処理部分は切り離して整理しておきたいものですね。せっかくモデルクラスを用意したのですから、ここはオペレーションもモデルクラスにまとめておくことにしましょう。

import javafx.ui.*;

class MyDataModel {
  attribute labelText: String;
  attribute fieldValue: String;
  operation btnAction();
}

operation MyDataModel.btnAction(){
  var s = this.fieldValue;
  var res = "あなたは、{s}と書いた。";
  this.labelText = res;
}

var model: MyDataModel = MyDataModel {
  labelText: "Hello!"
};

Frame {
  centerOnScreen: true
  width: 300
  height: 120
  title: "JavaFX"
  content: BorderPanel {
    top: Label {
      text: bind model.labelText
      font: Font {
        size: 16
        style: [BOLD]
      }
    }
    center: TextField {
      value: bind model.fieldValue
    }
    bottom: Button {
      text: "Click"
      action: operation(){
        model.btnAction();
      }
    }
  }
  visible: true
}


オペレーションのクラスへの追加は、Javaとはだいぶ勝手が違いますから注意が必要です。クラス内に書かれているのは、たったこれだけです。

operation btnAction();


JavaFX Scriptの場合、クラスにはオペレーションの宣言文だけしか記述しません。具体的な実装部分は、その後に用意します。それがこの部分です。

operation MyDataModel.btnAction(){
  var s = this.fieldValue;
  var res = "あなたは、{s}と書いた。";
  this.labelText = res;
}


クラスに用意するオペレーションは、「operation クラス.オペレーション」といった形で記述をします。これは、クラス内に宣言したオペレーションと名前や引数の指定が同じでないといけません。

また、クラス内のオペレーションでは、同じインスタンス内のアトリビュートやオペレーションを示すのに「this」が使えます。このあたりはJavaと同じ感覚で利用できそうですね。

「バインド」と「モデルクラス」を使うようになるあたりから、JavaFX Script特有の考え方に少しずつ慣れていく必要が生じてくるでしょう。これまでは、「Javaの簡易版スクリプト言語」といった感じで利用することができましたが、JavaFX Scriptは、決して「Javaからいろいろ機能を取り除いて簡単にしただけのもの」ではないのです。JavaFX Script特有のコーディングスタイルに少しずつ慣れていきましょう。
【編集部おすすめの購入サイト】
Amazonで Java 関連の書籍をチェック!楽天市場で Java 関連の書籍をチェック!
  • 前のページへ
  • 1
  • 2
  • 3
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます