jfx controles listview javafx

listview - controles - oracle combobox javafx



Selección múltiple de JavaFX ListView (1)

Si solo quiere saber qué elementos están seleccionados, eche un vistazo a mi ejemplo. Eche un vistazo al método 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); } }

Quiero seleccionar varios elementos de ListView. Reaccionaría al hacer clic con el mouse. Intenté con esto:

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

pero me estaba dando duplicados. Así que probé esto:

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

También me gustaría que, si se selecciona la celda, debería marcarse como tal (color de fondo diferente) ¡Gracias!