From 46c910f6d37fee3fb7ed9a306d15d09ec9ac66eb Mon Sep 17 00:00:00 2001 From: azhao96 Date: Thu, 3 Mar 2016 17:26:46 -0500 Subject: [PATCH] changed makeButton --- src/BrowserView.java | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/BrowserView.java b/src/BrowserView.java index 7d59606..6db1dbb 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,17 +202,12 @@ 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(); @@ -226,7 +223,7 @@ 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(); @@ -236,7 +233,7 @@ private Node makePreferencesPanel () { } // makes a button using either an image or a label - private Button makeButton (String property, EventHandler handler) { + private Button makeButton (String property, String methodName) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { // represent all supported image suffixes final String IMAGEFILE_SUFFIXES = String.format(".*\\.(%s)", String.join("|", ImageIO.getReaderFileSuffixes())); @@ -249,7 +246,16 @@ private Button makeButton (String property, EventHandler handler) { } else { result.setText(label); } - result.setOnAction(handler); + + Class noparams[] = {}; + Class c = this.getClass(); + Method method = c.getDeclaredMethod(methodName, noparams); + try { + result.setOnAction(event -> method.invoke(myModel, null)); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } return result; }