/ /動的にロードされたTreeViewItemにEventHandlerを与える方法 - 動的、javafx、ツリービュー、マウスイベント

どのように動的に読み込まれたTreeViewItemにEventHandlerを与えるか? - 動的、javafx、ツリービュー、マウスイベント

現時点ではデータベースベースのチャットシステムです。 すべてのユーザーの友人リストは、ログイン後にTreeViewで読み込みを取得します。

手段: ログイン後、次のFunktionによってuseresの友人の名前を要求します。 String namesSt[] = get.getUserFriendNameByUserID(currentUserID);

指定された名前を使用してそれらをTreeItemとしてFriendlist / TreeRootItem "rootItem"にロードするには

for (int counter = 0; counter < namesSt.length; counter++) {
System.out.println(namesSt[counter]);
TreeItem<String> item = new TreeItem<String> (namesSt[counter]);

item.addEventHandler(MouseEvent.MOUSE_CLICKED,handler);

rootItem.getChildren().add(item);
}

私は今私のrootItemを追加すると、私はTreeViewの名前を参照してください。 しかし、名前をクリックすると、指定されたMouseEventHandlerが呼び出されません。

さらに、MouseEventをトリガーするElementのテキストを要求したいので、これらの名前をspezial funktionに送信することができます。

どのように私はそのようなMouseEventをrealiceできますか? 動的に作成されたTreeItemからどのように呼び出すことが可能ですか?

助けていただきありがとうございます:)

歓声 トビ

回答:

回答№1の場合は3

TreeItemsはデータを表し、UIコンポーネントは表しません。彼らはマウスイベントを生成しません。あなたはマウスリスナーを TreeCell。これを行うには、セルファクトリを TreeView。セルファクトリは、 TreeCell彼らが必要とされているように。したがって、これは動的に追加されたツリー項目に対しても機能します。

次のようなものが必要になります:

TreeView<String> treeView ;

// ...

treeView.setCellFactory( tv -> {
TreeCell<String> cell = new TreeCell<>();
cell.textProperty().bind(cell.itemProperty());
cell.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
if (! cell.isEmpty()) {
String value = cell.getItem();
TreeItem<String> treeItem = cell.getTreeItem(); // if needed
// process ...
}
});
return cell ;
}