コンポーネントとレイアウト
では、Swingコンポーネントを使ってみましょう。SwingFrameのcontentには、1つのコンポーネントしか配置できません。ということは、いくつかのコンポーネントを組み込むためには、コンテナとなる部品が必要になる、ということですね。そう、旧バージョンでも登場した「パネル」です。
このパネル関係は、新バージョンでもほとんど変わりはありません。「BorderPanel」「FlowPanel」「GridPanel」といったものもそのままですし、使い方もほぼ同じです。ですから、レイアウト関係についてはほとんど新たに覚えなおす必要はないでしょう。
package javafxapp;
import javafx.ext.swing.*;
import javafx.scene.*;
import javax.swing.*;
SwingFrame {
title: "MyApplication"
width: 200
height: 120
closeAction: function() {
java.lang.System.exit(0);
}
visible: true
menus: []
content: BorderPanel {
top: Label {
text: "Hello!"
font: Font {
name: "Serif"
size: 16
style: FontStyle.BOLD
}
foreground: Color.DARKBLUE
}
center: TextField {}
bottom: Button {
text: "Click"
action: function(){}
}
}
}
BorderPanelでコンポーネント類を組み込んだ例。 |
BorderPanelを使っていくつかの部品をSwingFrameに配置した例です。ここでは、Label,TextField,Buttonといった部品を配置してみました。いずれも、旧バージョンにあったクラスですね。これらも、javafx.ext.Swingパッケージに用意されています。
ここでは、LabelのfontアトリビュートにFontクラスを使ってフォントを設定しています。これも旧バージョンにあったクラスですが、パッケージが「javafx.scene」に変更されているので注意が必要です。また、スタイルは「FontStyle」クラスのアトリビュートを使って指定しています。旧バージョンのように、単に「bold」などではなく、「FontStyle.BOLD」といった形で記述しないといけません。
また、テキストの色を設定するのに「foreground」アトリビュートを使っています。これには、Colorインスタンスを指定します。このあたりも旧バージョンと同じですが、やはりColorクラスの置かれているパッケージが変更になっています。新バージョンでは、javafx.scene.paintに用意されているのです。
また、Colorクラスには主な色の値がアトリビュートとして用意されていますが、これもやはり「Color.DARKBLUE」というようにクラス名から指定して書く必要があります。アトリビュートは、DARKBLUEのように従来なかった色もかなり増えていますので、ちょっと色を利用するだけならわざわざ一からColorインスタンスを作らずとも済むでしょう。