我想从ListView中选择多个项目。它会对鼠标点击做出反应。我试过这个:
selectedLogsList.addAll(logsListView.getSelectionModel().getSelectedItems());
但它给了我重复。 所以我尝试了这个:
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);
}
}
});
我也想,如果选择了单元格,它应该被标记为(不同的背景颜色) 谢谢!
答案 0 :(得分:15)
如果您只想知道选择了哪些项目,请查看我的示例。看看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);
}
}