TreeViewアイテムにコンテキストメニューが必要です。 イベントハンドラのActionEventが、どのTreeViewアイテムがクリックされたかについての情報を私に与えてくれると期待していますが、getSourceとgetTargetがMenu Itemを返すだけです。どのTreeViewアイテムがクリックされたかをどのようにして知ることができますか?別のタブに複数のツリービューを持つことができます。javaFXのツリービューでコンテキストメニューを動作させる方法は?
public void setContextMenu(ContextMenu cm)
{
fileTreeView.setContextMenu(cm);
}
私は今cellfactoryを使用しよう:この呼び出し
private void addFilesTab(FXMLLoader loader, String sRoot, ContextMenu cm) throws IOException
{
AnchorPane fileView = loader.load();
FileViewController fileViewController = loader.getController();
FileShort fsRoot = new FileShort(sRoot);
if(fsRoot.exists()) {
fileViewController.setRootFolder(fsRoot);
fileViewController.setContextMenu(cm);
ObservableList<Tab> tabs = navigationTabPane.getTabs();
tabs.add(new Tab(sRoot));
// Connect the FileView with last tab of the Navigation TabPane.
tabs.get(tabs.size()-1).setContent(fileView);
}
}
:私はここにメニューを添付しています
public class FileContextMenu extends ContextMenu
{
public FileContextMenu(EventHandler<ActionEvent> ehOpenFile,
EventHandler<ActionEvent> ehProjectFromTemplate)
{
MenuItem item1 = new MenuItem("Open File");
item1.setOnAction(ehOpenFile);
MenuItem item2 = new MenuItem("Create Project From Template");
item2.setOnAction(ehProjectFromTemplate);
this.getItems().addAll(item1, item2);
}
}
:
FileContextMenu cm = new FileContextMenu(new EventHandler<ActionEvent>() {
public void handle(ActionEvent e) {
System.out.println("Open File");
//MenuItem mi = (MenuItem)e.getSource();
EventTarget et = e.getTarget();
//File editorFile = new File(mi.getId());
System.out.println(et);
//mainWindowController.openEditor(editorFile);
}
}, new EventHandler<ActionEvent>() {
public void handle(ActionEvent e) {
System.out.println("Create Project From Template");
}
});
は、この呼び出し、しかし、私はpパラメタの使い方を理解していませんrを押して細胞の値を見つけます。このための私のコードは次のとおりです。
this.fileTreeView.setCellFactory(new Callback<TreeView<FileShort>,TreeCell<FileShort>>(){
@Override
public TreeCell<FileShort> call(TreeView<FileShort> p) {
TreeCell<FileShort> cell = new TreeCell<FileShort>();
cell.setContextMenu(cm);
return cell;
}
});
あなたは木の細胞でコンテキストメニューを登録されていますか? –
createNodeを作成すると、ファイル名を保持する派生クラスである各ノードのMenuItemを作成するようになりますか?私。各項目のcontextMenusを分ける? – Adder
Umm、いいえ。私はそのコメントを本当に理解していません。あなたが投稿したコードは、コンテキストメニューをどのように構築するかを示しています。あなたは 'something.setContextMenu(cm);や' something.setOnContextMenuRequested(event-> cm.show(...)); 'などのように、どこで使用するのかわかりません。 'something'が関連するツリーセルであれば、セルからツリー項目を取得し、必要な処理を行うことができます。 (しかし、各セル*(項目ではない)のコンテキストメニューを別々にしてください) –