2014-01-20 105 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); 
     } 
     } 
    }; 
    }); 
});