Jython で JavaFX の 入力フォームを作成する

Jython から、JavaFX を使えるようになった ので、引き続きJythonで、チュートリアルを進めていこう。

Createing a Form in JavaFX

こんな感じの入力フォームを作成。

jython_fx_form

Eclipse + PyDev でコードを書くと、参照も保管されるし、ストレス無くコーディングできるので、悪くない。

# -*- coding: utf-8 -*-
from java.lang import String
from javafx.application import Application
from javafx.event import EventHandler
from javafx.geometry import Insets, Pos
from javafx.scene import Scene
from javafx.scene.control import Button, Label, TextField, PasswordField
from javafx.scene.layout import GridPane, HBox
from javafx.scene.paint import Color
from javafx.scene.text import Text, Font, FontWeight

class SiginHandler(EventHandler):
    def __init__(self):
        self.actiontarget = None
    def handle(self, event):
        self.actiontarget.setFill(Color.FIREBRICK)
        self.actiontarget.setText(u"サイイインボタンが押されました")
        
class FormFx(Application):
    '''
    http://docs.oracle.com/javafx/2/get_started/form.htm
    '''
    def main(self):
        # パラメータに配列を渡せない!?
        super(FormFx, self).launch(self.__class__, String(""))
            
    def start(self, primaryStage):
        primaryStage.setTitle("JavaFX Welcom")

        grid = GridPane()
        grid.setHgap(10)
        grid.setVgap(10)
        grid.setPadding(Insets(25,25,25,25))
        primaryStage.setScene(Scene(grid,300,275))
        
        scenetitle = Text(u"ようこそ")
        scenetitle.setFont(Font.font("Meiryo", FontWeight.NORMAL, 20))
        grid.add(scenetitle, 0, 0, 2, 1)

        userName = Label(u"ユーザー名:")
        grid.add(userName, 0, 1)
        
        userTextField = TextField()
        grid.add(userTextField, 1, 1)
        
        pw = Label(u"パスワード:")
        grid.add(pw, 0, 2)
        
        pwBox = PasswordField()
        grid.add(pwBox, 1, 2)
        
        actiontarget = Text()
        grid.add(actiontarget, 1, 6)
        
        btn = Button(u"サインイン")
        hbBtn = HBox(10)
        hbBtn.setAlignment(Pos.BOTTOM_RIGHT)
        hbBtn.getChildren().add(btn)
      
        hdr = SiginHandler()
        hdr.actiontarget = actiontarget  
        btn.setOnAction(hdr)
        
        grid.add(hbBtn, 1, 4)
        
        primaryStage.show()
        
if __name__ == '__main__':
    h = FormFx()
    h.main()

上記チュートリアルから、レイアウトのポイント図を引用

login_gridlines_co