Select ListView 项目只能通过左键单击它们

Select ListView items only by left-clicking them

使用 JavaFX ListView 时,如果您右键单击 一个项目,该项目将selected。

是否可以 select 如果您左键单击 一个项目?

只需过滤 MOUSE_PRESSED 事件,检查辅助按钮是否按下,使用它并在需要时添加自定义处理代码。

右键单击还可以在 OS X 触摸板上触发 ContextMenuEvent.CONTEXT_MENU_REQUESTED 事件(有些奇怪的是,此类事件会触发选择),因此还要过滤和使用这些事件。

这对我有用:

public class ListViewSample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("List View Sample");        

        ListView<String> list = new ListView<String>();
        ObservableList<String> items =FXCollections.observableArrayList ( "Single", "Double", "Suite", "Family App");
        list.setItems(items);    

        // filter right mouse button
        list.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> 
        {
            if( e.isSecondaryButtonDown()) {
                e.consume();
            }

        });

        list.addEventFilter(ContextMenuEvent.CONTEXT_MENU_REQUESTED, Event::consume);

        // verify selection via logging
        list.getSelectionModel().selectedItemProperty().addListener(
                (ChangeListener<String>) (observable, oldValue, newValue) -> System.out.println( "Item selected: " + observable + ", " + oldValue + ", " + newValue)
                );

        StackPane root = new StackPane();
        root.getChildren().add(list);
        primaryStage.setScene(new Scene(root, 200, 250));
        primaryStage.show();
    }
}

也许这可以帮助

-控制器

@FXML
ListView<String> listT=new ListView<String>();
@FXML
Label lbl=new Label();

public void initialize(URL location, ResourceBundle resources) {
     listT=new Listv(listT);

} 

class 扩展列表视图

public class Listv extends ListView<String>{
ListView<String> llist=new ListView<String>();
int PrevIndex=0;

public Listv(ListView<String> l) {
    this.llist=l;
    llist.getItems().add("A");
    llist.getItems().add("A");
    llist.getItems().add("A");
    llist.getItems().add("A");
    this.llist.setOnMouseClicked(listclicked);
    this.llist.getSelectionModel().selectedIndexProperty().addListener(indexChanged);
}

EventHandler<MouseEvent> listclicked=new EventHandler<MouseEvent>() {       
    @Override
    public void handle(MouseEvent event) {
        if( event.getButton() == MouseButton.SECONDARY)
        {               
            Platform.runLater(()->{
                llist.getSelectionModel().select(PrevIndex);
            });          
        }
    }
};

ChangeListener<Object> indexChanged=new  ChangeListener<Object>() {

    @Override
    public void changed(ObservableValue<? extends Object> observable,Object oldValue, Object newValue) {
        PrevIndex=Integer.parseInt(oldValue.toString());
    }
};
}