2017-06-25 9 views
1

私はTableViewでJrubyアプリケーションを作成しようとしていますが、データをテーブルに取り込むことができず、そうするためのサンプルコードも見つけられませんでした。ここに私のFXMLの関連部分があります:Jruby/JrubyfxでTableViewを作成できません

<TableView prefHeight="400.0" prefWidth="200.0" id="table"> 
    <columns> 
    <TableColumn prefWidth="75.0" text="name"> 
     <cellValueFactory> 
     <PropertyValueFactory property="name" /> 
     </cellValueFactory> 
    </TableColumn> 
    <TableColumn prefWidth="75.0" text="address"> 
     <cellValueFactory> 
     <PropertyValueFactory property="address" /> 
     </cellValueFactory> 
    </TableColumn> 
    </columns> 
</TableView> 

そして、ここでは関係ルビーのコードは次のとおりです。

class Person 
    attr_accessor :name, :address 

    def initialize 
    @name = 'foo' 
    @address = 'bar' 
    end 
end 

class HelloWorldApp < JRubyFX::Application 
    def start(stage) 
    with(stage, title: "Hello World!", width: 800, height: 600) do 
     fxml HelloWorldController 
     @data = observable_array_list 
     @data.add Person.new 
     stage['#table'].set_items @data 
     show 
    end 
    end 
end 

誰かが私が間違ってやっている提案や作業のサンプルコードに私を指すことができますか?

答えて

1

contrib/fxmltableviewサンプルを参照してください。私はそれがまさにあなたがしたいことだと思います。実行中の問題は、PropertyValueFactoryがJavaクラスで、JRubyクラスのPersonにアクセスしようとしているという事実です。デフォルトでは、この質問は表示されませんが、Person.become_java!を呼び出すことで簡単に修正できます。ただし、PropertyValueFactoryは、[javatype] get[PropertyName]()のゲッターメソッドを想定しているのに対して、attr_accessorは、[rubytype] [propertyname]()という形式のゲッターメソッドしか生成しないため、これを行っても機能しません。この問題を解決するには、適切なメソッドを生成します(ただし、@ VARSを使用していない、これらは生のプロパティインスタンスがある)は、代わりにfxml_accessorを使用します。答えを

class Person 
    include JRubyFX # gain access to fxml_accessor 
    # must specify type as the concrete `Property` implementation 
    fxml_accessor :name, SimpleStringProperty 
    fxml_accessor :address, SimpleStringProperty 

    def initialize 
    # note use of self to call the method Person#name= instead of creating local variable 
    self.name = 'foo' 
    self.address = 'bar' 
    # could also technically use @address.setValue('bar'), but that isn't as rubyish 
    end 
end 

# become_java! is needed whenever you pass JRuby objects to java classes 
# that try to call methods on them, such as this case. If you used your own 
# cellValueFactory, this probably would not be necessary on person, but still 
# needed on your CVF 
Person.become_java! 
+0

感謝を。私はそれを受け入れますが、私はその後、これらの種類のもののためにノード/反応に移りました。 – pguardiario

関連する問題