3
이것에 대한 몇 가지 이전 질문을 살펴 봤지만 목록보기의 아무 곳이나 클릭하면 이벤트가 트리거됩니다. 이벤트가 트리거되는 솔루션을 찾고 있습니다. 목록보기의 속성을 클릭하면 컨텍스트 메뉴가 열립니다.Javafx ListView ContextMenu
이것에 대한 몇 가지 이전 질문을 살펴 봤지만 목록보기의 아무 곳이나 클릭하면 이벤트가 트리거됩니다. 이벤트가 트리거되는 솔루션을 찾고 있습니다. 목록보기의 속성을 클릭하면 컨텍스트 메뉴가 열립니다.Javafx ListView ContextMenu
이것은 실제로 복제본이지만 이전 질문을 찾을 수 없습니다.
셀 팩터 리를 사용하고 셀에 상황에 맞는 메뉴를 설정해야합니다. 비어 있지 않은 셀에서만 컨텍스트 메뉴를 설정해야합니다. (이것은 또한 당신에게 항목 별 상황에 맞는 메뉴를 가질 수있는 기회를 제공합니다.)
여기 간단한 예제 :
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.scene.Scene;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class ListViewContextMenuExample extends Application {
@Override
public void start(Stage primaryStage) {
ListView<String> listView = new ListView<>();
listView.getItems().addAll("One", "Two", "Three");
listView.setCellFactory(lv -> {
ListCell<String> cell = new ListCell<>();
ContextMenu contextMenu = new ContextMenu();
MenuItem editItem = new MenuItem();
editItem.textProperty().bind(Bindings.format("Edit \"%s\"", cell.itemProperty()));
editItem.setOnAction(event -> {
String item = cell.getItem();
// code to edit item...
});
MenuItem deleteItem = new MenuItem();
deleteItem.textProperty().bind(Bindings.format("Delete \"%s\"", cell.itemProperty()));
deleteItem.setOnAction(event -> listView.getItems().remove(cell.getItem()));
contextMenu.getItems().addAll(editItem, deleteItem);
cell.textProperty().bind(cell.itemProperty());
cell.emptyProperty().addListener((obs, wasEmpty, isNowEmpty) -> {
if (isNowEmpty) {
cell.setContextMenu(null);
} else {
cell.setContextMenu(contextMenu);
}
});
return cell ;
});
BorderPane root = new BorderPane(listView);
primaryStage.setScene(new Scene(root, 250, 400));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
좋아, 내가 더 정확하게 원하는 않습니다. – user3537381