私はJavaFXを使用してUIを生成するJavaプロジェクトを手に入れました。私はJavaプログラマーではありません(一般的なプログラマーではありません - 私はCS学生です)。それは少しの学習経験ですが、一般的に私は自分の質問に答えています。私は今、TableViewでスティッキースポットに当たっていますが、少し失われています。具体的には、TableViewとのやりとりに対応して何らかのアクションを設定することはできません。FXMLのTableView onMousePressedアクションを定義する
私のプロジェクトの現在のレイアウトは、Main.java、Controller.java、およびUI.fxmlです。 Mainでは、プログラムが開始されると、ペイン/シーンがUI.fxmlからロードされます。 (技術的には、このプロジェクトは、コードのいくつかの他のビットが含まれていますが、私は唯一の関連何投稿しようとしている。)私は、テーブルビューはそうとUI.fxmlで定義されています:
<TableView fx:id="queueTable">
<columns>
<TableColumn text="Title">
<cellValueFactory>
<PropertyValueFactory property="tableTitle"/>
</cellValueFactory>
</TableColumn>
<TableColumn text="Artist">
<cellValueFactory>
<PropertyValueFactory property="tableArtist"/>
</cellValueFactory>
</TableColumn>
<TableColumn text="Album">
<cellValueFactory>
<PropertyValueFactory property="tableAlbum"/>
</cellValueFactory>
</TableColumn>
</columns>
</TableView>
は、同様に、私はUIで定義されたいくつかのボタンがありますようonActionと.fxml:
<Button fx:id="buttonQueueAdd" text="Add" onAction="#addMediaToQueue"/>
を私の前のコードでは、私は私のテーブルビューが生成されていた方法では、テーブルビュー内のアイテムが選択された場合のイベントを定義することができました。ただし、すべてのUIの作成はFXMLファイルを介して行われます。 FXMLファイルには、それが参照するコントローラクラス(Controller.java)があります。ここではすべてのアクションがさまざまなボタンに対して定義されていますが、FXMLではonAction
,setOnMousePressed
などの属性を受け付けるようには見えませんボタンの 'onAction'属性を受け付けるように、TableViewのファイルを開きます。
メインクラスでアクションを定義する(またはシーンが作成されているときにメインクラスで呼び出されたコントローラクラスでメソッドを作成する)ことで回避策を得ることはできますが、そうではありません私のコントローラクラス内で静的にqueueTable
を作成しない限り、TableView内のアイテムを操作するすべての関数が破損します。たとえば、アイテムが追加されたことを示すためにUIが更新されません。
FXMLで作成されたTableViewを作成せず、TableViewを作成し、そのすべてのonMousePressedイベントなどをFXMLファイルの外に設定し、それらをシーンメインクラスのstart
メソッド。これはそれが以前に行われた方法であり、それは受け入れられていました。しかし、それは乱雑に思えますし、私のUI要素が複数のクラスやFXMLファイルに広がってしまいます。これは他のいくつかの学生と一緒に取り組んでいるプロジェクトです。私はすべてを流線型にして整理しようとしていますできるだけ。私は弾を噛んで "厄介な"やり方をしなければならないのですか、それとも良い選択肢がありますか?