From ee79834d9d79d79712b1936e0d1c6c6e52375f96 Mon Sep 17 00:00:00 2001 From: Andy Date: Thu, 3 Mar 2016 17:22:06 -0500 Subject: [PATCH] use reflection to cget methods --- .classpath | 6 ++++++ src/BrowserView.java | 39 ++++++++++++++++++++++----------------- 2 files changed, 28 insertions(+), 17 deletions(-) create mode 100644 .classpath diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..fb50116 --- /dev/null +++ b/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/BrowserView.java b/src/BrowserView.java index 7d59606..9ef83d4 100644 --- a/src/BrowserView.java +++ b/src/BrowserView.java @@ -1,4 +1,6 @@ import java.awt.Dimension; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.net.URL; import java.util.Optional; import java.util.ResourceBundle; @@ -200,21 +202,16 @@ private Node makeNavigationPanel () { HBox result = new HBox(); // create buttons, with their associated actions // old style way to do set up callback (anonymous class) - myBackButton = makeButton("BackCommand", new EventHandler() { - @Override - public void handle (ActionEvent event) { - back(); - } - }); + myBackButton = makeButton("BackCommand", "back"); result.getChildren().add(myBackButton); // new style way to do set up callback (lambdas) - myNextButton = makeButton("NextCommand", event -> next()); + myNextButton = makeButton("NextCommand", "next"); result.getChildren().add(myNextButton); - myHomeButton = makeButton("HomeCommand", event -> home()); + myHomeButton = makeButton("HomeCommand", "home"); result.getChildren().add(myHomeButton); // if user presses button or enter in text field, load/show the URL EventHandler showHandler = new ShowPage(); - result.getChildren().add(makeButton("GoCommand", showHandler)); +// result.getChildren().add(makeButton("GoCommand", showHandler)); myURLDisplay = makeInputField(40, showHandler); result.getChildren().add(myURLDisplay); return result; @@ -226,17 +223,17 @@ private Node makePreferencesPanel () { myFavorites = new ComboBox(); myFavorites.setPromptText(myResources.getString("FavoriteFirstItem")); myFavorites.valueProperty().addListener((o, s1, s2) -> showFavorite(s2)); - result.getChildren().add(makeButton("AddFavoriteCommand", event -> addFavorite())); + result.getChildren().add(makeButton("AddFavoriteCommand", "addFavorite")); result.getChildren().add(myFavorites); - result.getChildren().add(makeButton("SetHomeCommand", event -> { - myModel.setHome(); - enableButtons(); - })); +// result.getChildren().add(makeButton("SetHomeCommand", event -> { +// myModel.setHome(); +// enableButtons(); +// })); return result; } // makes a button using either an image or a label - private Button makeButton (String property, EventHandler handler) { + private Button makeButton (String property, String method) { // represent all supported image suffixes final String IMAGEFILE_SUFFIXES = String.format(".*\\.(%s)", String.join("|", ImageIO.getReaderFileSuffixes())); @@ -248,8 +245,16 @@ private Button makeButton (String property, EventHandler handler) { new Image(getClass().getResourceAsStream(DEFAULT_RESOURCE_PACKAGE + label)))); } else { result.setText(label); - } - result.setOnAction(handler); + } + BrowserView self = this; + result.setOnAction(event -> { + try { + getClass().getDeclaredMethod(method, null).invoke(self, null); + } + catch (Exception e) { + e.printStackTrace(); + } + }); return result; }