patternjavaMinor
Media player at your service
Viewed 0 times
playerserviceyourmedia
Problem
I have a very basic version of a media player built using JavaFX. The project is well segregated and has a different packages for controllers, utils and supporter classes.
My project follows the MVC pattern and it contains the following important parts:
Main.java
```
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/com/ita/fxml/mediaplayer.fxml"));
BorderPane pane = loader.load();
Scene scene = new Scene(pane, 650, 400);
primaryStage.setScene(scene);
MediaPlayerController controller = ((MediaPlayerController) loader.getController());
// Load Playlist FXML and inject controller/root
FXMLLoader playListLoader = new FXMLLoader(getClass().getResource("/com/ita/fxml/playlist.fxml"));
playListLoader.load();
controller.injectPlayListController((PlaylistController) playListLoader.getController());
controller.injectPlayListRoot(playListLoader.getRoot());
bindSize(controller, scene);
controller.setStage(primaryStage);
primaryStage.show();
controller.applyDragAndDropFeatures(scene);
}
private void bindSize(MediaPlayerController controller, Scene scene){
controller.timerSliderWidthProperty().bind(scene.widthProperty().subtract(500));
controller.mediaViewWidthProperty().bind(scene.widthProperty());
controller.mediaViewHeightProperty().bind(scene.heightProperty().subtract(70));
}
public static void main(String[] args) {
My project follows the MVC pattern and it contains the following important parts:
- All the views are in FXML files.
- These views have dedicated controllers for them, all inside the
com.ita.controllerpackage.
- Some custom controls / dialogs inside the
com.ita.uipackage.
- Utility classes inside the
com.ita.util.
- The
Mainclass extendsApplicationand is the entry point. It is also responsible for invocation and loading the views into the stage.
Main.java
```
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/com/ita/fxml/mediaplayer.fxml"));
BorderPane pane = loader.load();
Scene scene = new Scene(pane, 650, 400);
primaryStage.setScene(scene);
MediaPlayerController controller = ((MediaPlayerController) loader.getController());
// Load Playlist FXML and inject controller/root
FXMLLoader playListLoader = new FXMLLoader(getClass().getResource("/com/ita/fxml/playlist.fxml"));
playListLoader.load();
controller.injectPlayListController((PlaylistController) playListLoader.getController());
controller.injectPlayListRoot(playListLoader.getRoot());
bindSize(controller, scene);
controller.setStage(primaryStage);
primaryStage.show();
controller.applyDragAndDropFeatures(scene);
}
private void bindSize(MediaPlayerController controller, Scene scene){
controller.timerSliderWidthProperty().bind(scene.widthProperty().subtract(500));
controller.mediaViewWidthProperty().bind(scene.widthProperty());
controller.mediaViewHeightProperty().bind(scene.heightProperty().subtract(70));
}
public static void main(String[] args) {
Solution
Depending on who you ask, this piece of code could be changed slightly to reduce nesting
there really isn't a reason for putting in another if statement, just merge the condition statements into one condition
Same here
I just put the conditionals together, does the exact same thing as your code, but slightly clearer
@FXML
void delete(ActionEvent event) {
if (playList.getSelectionModel().getSelectedItem() != null) {
if(null!=playListFiles || !playListFiles.isEmpty()) {
deletedMedia.setValue((Path) playList.getSelectionModel().getSelectedItem());
playListFiles.remove(playList.getSelectionModel().getSelectedItem());
playList.setItems(playListFiles);
}
}
}there really isn't a reason for putting in another if statement, just merge the condition statements into one condition
@FXML
void delete(ActionEvent event) {
if ((playList.getSelectionModel().getSelectedItem() != null) &&
(null!=playListFiles || !playListFiles.isEmpty()) {
deletedMedia.setValue((Path) playList.getSelectionModel().getSelectedItem());
playListFiles.remove(playList.getSelectionModel().getSelectedItem());
playList.setItems(playListFiles);
}
}Same here
@Override
public void initialize(URL location, ResourceBundle resources) {
playList.setOnMouseClicked((click) -> {
if (click.getClickCount() == 2) {
if (playList.getSelectionModel().getSelectedItem() != null) {
selectedMedia.setValue((Path) playList.getSelectionModel().getSelectedItem());
}
}
});
}I just put the conditionals together, does the exact same thing as your code, but slightly clearer
@Override
public void initialize(URL location, ResourceBundle resources) {
playList.setOnMouseClicked((click) -> {
if ((click.getClickCount() == 2) && (playList.getSelectionModel().getSelectedItem() != null)) {
selectedMedia.setValue((Path) playList.getSelectionModel().getSelectedItem());
}
}
});Code Snippets
@FXML
void delete(ActionEvent event) {
if (playList.getSelectionModel().getSelectedItem() != null) {
if(null!=playListFiles || !playListFiles.isEmpty()) {
deletedMedia.setValue((Path) playList.getSelectionModel().getSelectedItem());
playListFiles.remove(playList.getSelectionModel().getSelectedItem());
playList.setItems(playListFiles);
}
}
}@FXML
void delete(ActionEvent event) {
if ((playList.getSelectionModel().getSelectedItem() != null) &&
(null!=playListFiles || !playListFiles.isEmpty()) {
deletedMedia.setValue((Path) playList.getSelectionModel().getSelectedItem());
playListFiles.remove(playList.getSelectionModel().getSelectedItem());
playList.setItems(playListFiles);
}
}@Override
public void initialize(URL location, ResourceBundle resources) {
playList.setOnMouseClicked((click) -> {
if (click.getClickCount() == 2) {
if (playList.getSelectionModel().getSelectedItem() != null) {
selectedMedia.setValue((Path) playList.getSelectionModel().getSelectedItem());
}
}
});
}@Override
public void initialize(URL location, ResourceBundle resources) {
playList.setOnMouseClicked((click) -> {
if ((click.getClickCount() == 2) && (playList.getSelectionModel().getSelectedItem() != null)) {
selectedMedia.setValue((Path) playList.getSelectionModel().getSelectedItem());
}
}
});Context
StackExchange Code Review Q#97807, answer score: 4
Revisions (0)
No revisions yet.