2014-06-11 22 views
5

Desidero selezionare più elementi da ListView. Reagirebbe al clic del mouse. Ho provato con questo:JavaFX ListView Selezione multipla

selectedLogsList.addAll(logsListView.getSelectionModel().getSelectedItems()); 

ma mi stava dando i duplicati. Così ho provato questo:

logsListView.getSelectionModel().selectedItemProperty().addListener(
     new ChangeListener<String>() { 
      @Override 
      public void changed(ObservableValue<? extends String> ov, 
       String old_val, String new_val) { 
        if(selectedLogsList.contains(new_val)) { 
         selectedLogsList.remove(new_val); 
        } else { 
         selectedLogsList.add(new_val); 
        } 
     } 
    }); 

vorrei anche così, se viene selezionata cella, deve essere contrassegnato come tale (colore di sfondo) Grazie!

+1

che cosa esattamente vuoi ottenere? vuoi sapere tutti gli oggetti selezionati? Puoi rendere ListView selezionabile tramite: listView.getSelectionModel(). SetSelectionMode (SelectionMode.MULTIPLE); – blaster

+0

Semplice: D Ha funzionato sulla selezione multipla con CTRL. Ma fa ancora duplicati. Se faccio clic più volte sulla stessa cella, lo aggiunge ogni volta. Invece, voglio rimuoverlo la seconda volta che clicco. – Bade

+0

Se copi il codice dalla mia risposta qui sotto, fa esattamente quello che vuoi. Se premi CTRL puoi aggiungere diversi oggetti e nel metodo setOnMouseClicked() otterrai tutti gli elementi selezionati. Se deselezioni un oggetto (premendo ancora CTRL) chiamerà nuovamente il metodo setOnMouseClicked() - ma questa volta l'oggetto non sarà nella lista. – blaster

risposta

10

Se vuoi solo sapere quali articoli sono selezionati dai un'occhiata al mio esempio. Date un'occhiata al metodo setOnMouseClicked() ..

package application; 

    import javafx.application.Application; 
    import javafx.collections.FXCollections; 
    import javafx.collections.ObservableList; 
    import javafx.event.Event; 
    import javafx.event.EventHandler; 
    import javafx.scene.Scene; 
    import javafx.scene.control.ListView; 
    import javafx.scene.control.SelectionMode; 
    import javafx.scene.layout.Pane; 
    import javafx.stage.Stage; 


    public class Main extends Application { 
     @Override 
     public void start(Stage primaryStage) { 
      try { 
       Pane root = new Pane(); 
       Scene scene = new Scene(root,600,600); 
       scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 

       ListView<String> listView = new ListView<String>(); 

       ObservableList<String> list = FXCollections.observableArrayList(); 





       listView.setItems(list); 

       list.add("item1"); 
       list.add("item2"); 
       list.add("item3"); 

       listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 


       listView.setOnMouseClicked(new EventHandler<Event>() { 

        @Override 
        public void handle(Event event) { 
         ObservableList<String> selectedItems = listView.getSelectionModel().getSelectedItems(); 

         for(String s : selectedItems){ 
          System.out.println("selected item " + s); 
         } 

        } 

       }); 


       list.add("item4"); 

       root.getChildren().add(listView); 

       primaryStage.setScene(scene); 
       primaryStage.show(); 
      } catch(Exception e) { 
       e.printStackTrace(); 
      } 
     } 

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

Si noti che questo non funziona se l'utente utilizza la tastiera per selezionare gli elementi. Dovresti registrare un listener con 'list.getSelectionModel(). GetSelectedItems()' invece di usare un listener del mouse. –

Problemi correlati