2015-02-01 2 views
3

이것에 대한 몇 가지 이전 질문을 살펴 봤지만 목록보기의 아무 곳이나 클릭하면 이벤트가 트리거됩니다. 이벤트가 트리거되는 솔루션을 찾고 있습니다. 목록보기의 속성을 클릭하면 컨텍스트 메뉴가 열립니다.Javafx ListView ContextMenu

답변

9

이것은 실제로 복제본이지만 이전 질문을 찾을 수 없습니다.

셀 팩터 리를 사용하고 셀에 상황에 맞는 메뉴를 설정해야합니다. 비어 있지 않은 셀에서만 컨텍스트 메뉴를 설정해야합니다. (이것은 또한 당신에게 항목 별 상황에 맞는 메뉴를 가질 수있는 기회를 제공합니다.)

여기 간단한 예제 :

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); 
    } 
} 
+0

좋아, 내가 더 정확하게 원하는 않습니다. – user3537381