Nodeに任意の情報をのせて後から利用する話
ListView上には任意のNodeがのせられますが、右クリックしてあるActionを実行するときに、選択したNodeの情報を取得したい場合があ ります。その時にはset/getUserdata(Object)というメソッドを利用することでNodeに任意の情報を結びつけることができます。
public class StageController{
@FXML
private ListView<Label> testview;
@FXML
private void setData(Object obj){
Label label = new Label();
label.setText(obj.getText());
label.setUserData(obj);
testvew.getItems().add(label);
}
@FXML
private void getData(){
MultipleSelectionModel<Label> model = testview.getSelectionModel();
Object object = (Object)model.getSelectedItem().getUserData();
}
}
現在作っているTwitterのクライアントでは、Timeline上のTweetへの返信などに利用しています。
これを見つけるまではObjectを保持するArrayListを別に作っておいてIndexで情報を引き出す形にしていましたが、こっちだと ArrayListとListViewの内容がずれたりする心配がないのでこっちの方がいいと思います。
ListViewにFXMLで設計した部品を貼り付ける話
現在JavaFXを用いて作っているアプリケーション(Twitterのクライアント)で、ListViewにTimelineを表示させるために Paneを貼り付けることにした。このPaneは予めFXMLで設計することにしたが、PaneにFXMLをロードした後に情報をのせる方法がわからず 困っていたが、FXMLにgetControllerというメソッドがあるらしいので使ってみた。
public class MainStageController{
@FXML
ListView<AnchorPane> testview;
public void setTest(Status status){
AnchorPane pane = new AnchorPane();
FXMLLoader loader = new FXMLLoader(getClass().getResource("TimelinePane.fxml"));
try {
pane = (AnchorPane)loader.load();
TimelinePaneController controller = loader.getController();
controller.setdata(status);
testview.getItems().add(0,pane);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class TimelinePaneController {
@FXML
Label ScreenName;
@FXML
Label text;
void setdata(Status status){
ScreenName.setText(status.getUser().getScreenName());
text.setText(status.getText());
}
}
このように書くことで、設計したPaneのControllerクラスのインスタンスを取得でき、Paneの情報を載せることができた。
初投稿
いろいろ書いてく予定