JavaFXとしての自然な戦略は次のようなものではないかと思います。
cellValueFactoryは数値としての値を取るようにSimpleIntegerPropertyなどを用います。
TableView上への表示("\xxx,xxx"のような形式)はカスタムセルで実現
本件の目的にはjavafx.scene.control.cells.TextFieldTableCellが便利そうです。値(数値)をどのような文字列で表現するかはjavafx.util.StringConverterの派生クラスを定義することで実現します。
ruby, jruby, jrubyfxについてちゃんとした勉強ができてないのでよい実装ではないかも知れませんが、動かしてみた簡単なコードを載せておきます。
ruby
1 require 'java'
2 require 'jrubyfx'
3
4 module Jfxu
5 include_package "javafx.util"
6 end
7
8 module Jfxscc
9 include_package "javafx.scene.control.cell"
10 end
11
12 class TableTestApp < JRubyFX : : Application
13 def start ( stage )
14 tableView = createTableView ( )
15 tableView . setItems ( createTableModel ( ) )
16
17 with ( stage , title : "Table Test" , width : 300 , height : 200 ) do
18 layout_scene do
19 tableView
20 end
21 show
22 end
23 end
24
25 def createTableView ( )
26 tableView = TableView . new
27 tc1 = TableColumn . new ( 'Id' )
28 tc1 . setCellValueFactory ( lambda { | f | SimpleIntegerProperty . new ( f . getValue . id ) } )
29 tc2 = TableColumn . new ( 'Name' )
30 tc2 . setCellValueFactory ( lambda { | f | SimpleStringProperty . new ( f . getValue . name ) } )
31 tc3 = TableColumn . new ( 'Salary' )
32 tc3 . setCellValueFactory ( lambda { | f | SimpleIntegerProperty . new ( f . getValue . salary ) } )
33 tc3 . setCellFactory ( lambda { | tc | Jfxscc : : TextFieldTableCell . new ( MoneyConverter . new ) } )
34 tc3 . style = "-fx-alignment: CENTER-RIGHT;"
35 tableView . getColumns . addAll ( tc1 , tc2 , tc3 )
36 tableView
37 end
38
39 def createTableModel ( )
40 ml = FXCollections . observableArrayList
41 ml . add ( Model . new ( 1 , 'John' , 100000 ) )
42 ml . add ( Model . new ( 2 , 'Paul' , 20000 ) )
43 ml . add ( Model . new ( 3 , 'George' , 3000 ) )
44 ml . add ( Model . new ( 4 , 'Ringo' , 400 ) )
45 ml
46 end
47 end
48
49 class MoneyConverter < Jfxu : : StringConverter
50 def toString ( m )
51 java . lang . String . format ( "\\%,d" , m )
52 end
53 end
54
55 class Model
56 attr_accessor ( :id , :name , :salary )
57
58 def initialize ( id , name , salary )
59 @id = id
60 @name = name
61 @salary = salary
62 end
63 end
64
65 TableTestApp . launch
66
補足:
金額のカラムの右寄せのためstyleプロパティーを直接設定しています。このようにしたのはrubyコードのみで完結させるためですが、本来はスタイルシートへ定義しておくべきと思います。
Windows10
jruby 9.1.12.0
jrubyfx 1.2.0
java 1.8.0_131
なおJavaFXの画面そのものは出るのですが、当方の環境設定不備あるいはコードの不備かは不明ですが上記コードをjruby xxx.rb
で実行するとコンソールに以下のような警告メッセージが出てしまっています。もしコードに不備があった場合はご容赦ください。
C:/jruby-9.1.12.0/lib/ruby/gems/shared/gems/jrubyfx-fxmlloader-0.4.1-java/lib/fxmlloader/elts.rb:158: warning: `<<' after local variable or literal is interpreted as binary operator
C:/jruby-9.1.12.0/lib/ruby/gems/shared/gems/jrubyfx-fxmlloader-0.4.1-java/lib/fxmlloader/elts.rb:158: warning: even though it seems like here document
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/26 06:05