2014-01-20 166 views
0

我正在使用javafx創建一個ListView,其中添加了包含按鈕的Observable List。 我想在這lists.Any幫助每個按鈕添加動作......在javafx的ObservableList項上添加操作

ObservableList videoLists = null; 
    if (listView.getSelectionModel().getSelectedItem().equals("class 8")) { 
     classTitleID.setText("class 8 video lists"); 
     File physicsFolder = new File("D:\\videos\\physics"); 
     File[] listOfFiles = physicsFolder.listFiles(); 
     videoLists = FXCollections.observableArrayList(); 
     for (File file : listOfFiles) { 
      if (file.isFile()) { 
       videoLists.add(new Button(file.getName())); 
       physicsListview.setItems(videoLists); 
      } 
     } 
    } 

回答

1

根本就

for (File file : listOfFiles) { 
     if (file.isFile()) { 
    Button button = new Button(file.getName()); 
    button.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent actionEvent) { 
      //your action 
     } 
    }); 
      videoLists.add(button); 
      physicsListview.setItems(videoLists); 
     } 
    } 
+0

感謝您的回覆。但我想在ObservableList中的每個按鈕上添加不同的操作。我怎樣才能做到這一點.... –

0

它通常是一個壞主意,有Node子類中ListView S中的數據類型(或TableView s,ComboBox es等):它打破了MVC。使您的ListViewListView<File>並使用cellFactory顯示ListView單元中的按鈕。你可以在那裏設置動作處理器。

ListView<File> physicsListview = new ListView<>(); 
ObservableList<File> videoLists = FCollections.observableArrayList(); 
//... 
for (File file : listOfFiles) { 
    if (file.isFile()) { 
    videoLists.add(file); 
    } 
} 
physicsListview.setItems(videoLists); 

physicsListview.setCellFactory(new Callback<ListView<File>, ListCell<File>>() { 
    @Override 
    public ListCell<File> call(ListView<File>()) { 
    final Button button = new Button(); 
    return new ListCell<File>() { 
     @Override 
     public void updateItem(final File item, boolean empty) { 
     super.updateItem(item, empty); 
     if (empty) { 
      setGraphic(null); 
     } else { 
      button.setText(item.getName()); 
      button.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       // handle action. 
       // You can access the File object item here if needed 
      } 
      }); 
      setGraphic(button); 
     } 
     } 
    }; 
    }); 
});