2014-06-11 14 views
5

Tôi muốn chọn nhiều mục từ ListView. Nó sẽ phản ứng khi nhấp chuột. Tôi đã thử với điều này:JavaFX ListView Nhiều lựa chọn

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

nhưng nó đã cho tôi bản sao. Vì vậy, tôi cố gắng này:

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

Tôi cũng muốn rằng, nếu ô được chọn, nó phải được đánh dấu như vậy (màu nền khác nhau) Cảm ơn!

+1

chính xác bạn muốn đạt được điều gì? bạn có muốn biết tất cả các mục được chọn không? Bạn có thể làm cho ListView của bạn đa lựa chọn bởi: listView.getSelectionModel(). SetSelectionMode (SelectionMode.MULTIPLE); – blaster

+0

Điều đó đơn giản: D Nó hoạt động liên quan đến nhiều lựa chọn với CTRL. Nhưng nó vẫn làm cho bản sao. Nếu tôi nhấp nhiều lần trên cùng một ô, nó sẽ thêm nó mỗi lần. Thay vào đó, tôi muốn nó để loại bỏ nó lần thứ hai tôi nhấp vào. – Bade

+0

Nếu bạn sao chép mã từ câu trả lời của tôi dưới đây nó thực hiện chính xác những gì bạn muốn. Nếu bạn nhấn CTRL, bạn có thể thêm một số mục và trong phương thức setOnMouseClicked(), bạn sẽ nhận được tất cả các mục đã chọn. Nếu bạn bỏ chọn một mục (vẫn nhấn CTRL), nó sẽ gọi phương thức setOnMouseClicked() - nhưng lần này mục đó sẽ không có trong danh sách. – blaster

Trả lời

10

Nếu bạn chỉ muốn biết mục nào được chọn có hãy xem ví dụ của tôi. Hãy xem phương thức 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

Lưu ý rằng thao tác này sẽ không hoạt động nếu người dùng sử dụng bàn phím để chọn các mục. Bạn nên đăng ký một trình lắng nghe với 'list.getSelectionModel(). GetSelectedItems()' thay vì sử dụng một trình lắng nghe chuột. –

Các vấn đề liên quan