JavaFXで遊んでみる
次の記事を何気なく眺めていて、唐突にJavaFXに触れてみようと思ったらしい。
この記事ではJavaFX 1.3+NetBeans 6.9betaを使っているのだが、NetBeansを混在させて苦労したら嫌だなぁと思い、JavaFX 1.2.1+Eclipseでやることにした。
導入の参考にしたのは次のサイト。
手順をざっくりとまとめると次のとおり。
- JavaFX 1.2.1 SDKをダウンロード&インストール。
- Eclipseを(必要に応じて)ダウンロード&インストール。
- JavaFX Plugin for Eclipseをインストール。
- http://javafx.com/downloads/eclipse-plugin/
- JavaFX SDKのパスの設定。
- [Window]-[Preference]の[Java]-[Build Path]-[Classpath Variables]で"JAVAFX_HOME"の値
- 動作確認
で、せっかくなので(謎)、簡単な電卓アプリを作ってみた。
コメントが全然ないけど、初めてのJavaFXアプリということでさらしておく。
import javafx.stage.Stage; import javafx.scene.Scene; import javafx.ext.swing.SwingButton; import javafx.scene.text.Text; import javafx.scene.text.TextAlignment; import javafx.scene.text.Font; import javafx.scene.paint.Color; import javafx.ext.swing.SwingTextField; import javafx.ext.swing.SwingHorizontalAlignment; /** * @author HHeLiBeX */ var display = SwingTextField { columns: 8, text: "0", editable: false font: Font { size: 24 }, horizontalAlignment: SwingHorizontalAlignment.RIGHT } var displayOp:Text = Text { font: Font { size: 24 }, content: "" translateX: bind display.translateX + display.width + 5 translateY: 20 } var displayedValue:Long = 0 on replace { display.text = "{displayedValue}"; } var currentValue:Long = 0; var opPressed:Boolean = false; class CalcButton extends SwingButton { public-init var number = 0; init { text = "{number}"; action = function() { if (opPressed) { displayedValue = 0; } if (0 <= displayedValue and displayedValue < 1000000000) { displayedValue = displayedValue * 10 + number; } else if (-1000000000 < displayedValue and displayedValue < 0) { displayedValue = displayedValue * 10 - number; } opPressed = false; } } } var opCopyButton = OpButton { text: "" calc: function() { currentValue = displayedValue; } } var clearButton = SwingButton { text: "C" translateX: 120 translateY: 40 action: function() { currentValue = 0; displayedValue = 0; prevOp = opCopyButton; opPressed = false; displayOp.content = ""; } } var prevOp:OpButton = opCopyButton; class OpButton extends SwingButton { init { action = function() { opPressed = true; prevOp.calc(); prevOp = this; displayOp.content = text; } } var calc:function(); } var opEqualButton = OpButton { text: "=" translateX: 160 translateY: 200 calc: function() { } } var opPlusButton = OpButton { text: "+" translateX: 120 translateY: 200 calc: function() { currentValue = currentValue + displayedValue; displayedValue = currentValue; } } var opMinusButton = OpButton { text: "-" translateX: 120 translateY: 160 calc: function() { currentValue = currentValue - displayedValue; displayedValue = currentValue; } } var opAsterButton = OpButton { text: "*" translateX: 120 translateY: 120 calc: function() { currentValue = currentValue * displayedValue; displayedValue = currentValue; } } var opSlashButton = OpButton { text: "/" translateX: 120 translateY: 80 calc: function() { currentValue = currentValue / displayedValue; displayedValue = currentValue; } } Stage { title : "JavaFX Calc" scene: Scene { width: 200 height: 300 content: [ display, displayOp, CalcButton { number: 7, translateX: 0, translateY: 80, } CalcButton { number: 8, translateX: 40, translateY: 80, } CalcButton { number: 9, translateX: 80, translateY: 80, } CalcButton { number: 4, translateX: 0, translateY: 120, } CalcButton { number: 5, translateX: 40, translateY: 120, } CalcButton { number: 6, translateX: 80, translateY: 120, } CalcButton { number: 1, translateX: 0, translateY: 160, } CalcButton { number: 2, translateX: 40, translateY: 160, } CalcButton { number: 3, translateX: 80, translateY: 160, } CalcButton { number: 0, translateX: 40, translateY: 200, } opPlusButton, opMinusButton, opAsterButton, opSlashButton, opEqualButton, clearButton ] } }
エラーチェックをぜんぜんやっていないので、ゼロで割っちゃだめよ(謎)