From 70d81591e883a072d159dec625baf0701ee5c702 Mon Sep 17 00:00:00 2001 From: Dominik Gruntz Date: Sun, 5 Aug 2018 12:21:25 +0200 Subject: [PATCH 1/3] Fixes the treeview expand/collapse arrow bug This commit fixes the treeview expand/collapse arrow bug as described in https://stackoverflow.com/questions/50011276/javafx-treeview-expand-collapse-disclosure-arrow-bug It adds a style file (tree.css) which defines the rotation angle of the arrow for both the normal and the expanded case. --- .../src/main/java/de/javafxbuch/MainApp.java | 5 ++--- .../src/main/resources/de/javafxbuch/tree.css | 7 +++++++ 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 Kapitel 4/4.2.9/controls-treeview/src/main/resources/de/javafxbuch/tree.css diff --git a/Kapitel 4/4.2.9/controls-treeview/src/main/java/de/javafxbuch/MainApp.java b/Kapitel 4/4.2.9/controls-treeview/src/main/java/de/javafxbuch/MainApp.java index 22081fe..af8ae52 100644 --- a/Kapitel 4/4.2.9/controls-treeview/src/main/java/de/javafxbuch/MainApp.java +++ b/Kapitel 4/4.2.9/controls-treeview/src/main/java/de/javafxbuch/MainApp.java @@ -49,11 +49,10 @@ protected void updateItem(Color item, boolean empty) { .add(new TreeItem(Color.BLUE)); StackPane pane = new StackPane(treeView); Scene scene = new Scene(pane, 300, 250); + scene.getStylesheets().add(getClass().getResource("tree.css").toExternalForm()); - primaryStage.setTitle( - "TableView Demo"); + primaryStage.setTitle("TableView Demo"); primaryStage.setScene(scene); - primaryStage.show(); } diff --git a/Kapitel 4/4.2.9/controls-treeview/src/main/resources/de/javafxbuch/tree.css b/Kapitel 4/4.2.9/controls-treeview/src/main/resources/de/javafxbuch/tree.css new file mode 100644 index 0000000..4ca88e3 --- /dev/null +++ b/Kapitel 4/4.2.9/controls-treeview/src/main/resources/de/javafxbuch/tree.css @@ -0,0 +1,7 @@ +.tree-cell > .tree-disclosure-node > .arrow { + -fx-rotate: 0; +} + +.tree-cell:expanded > .tree-disclosure-node > .arrow { + -fx-rotate: 90; +} From d369af28daf5b0aabcde4875f595a7749bbe533b Mon Sep 17 00:00:00 2001 From: Dominik Gruntz Date: Wed, 15 Aug 2018 13:58:31 +0200 Subject: [PATCH 2/3] Removes doubled navigate menu Removes menuBar.getMenus().add(navigateMenu); as the menu is also added with the command menuBar.getMenus().addAll(navigateMenu, historyMenu); It appeared twice. --- .../13.1/webview-hello/src/main/java/de/javafxbuch/MainApp.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Kapitel 13/13.1/webview-hello/src/main/java/de/javafxbuch/MainApp.java b/Kapitel 13/13.1/webview-hello/src/main/java/de/javafxbuch/MainApp.java index ca606be..7733cb6 100644 --- a/Kapitel 13/13.1/webview-hello/src/main/java/de/javafxbuch/MainApp.java +++ b/Kapitel 13/13.1/webview-hello/src/main/java/de/javafxbuch/MainApp.java @@ -42,7 +42,6 @@ public void start(Stage primaryStage) { MenuItem home = new MenuItem("Home"); navigateMenu.getItems().addAll(home); home.setOnAction(e -> engine.load("http://eppleton.de")); - menuBar.getMenus().add(navigateMenu); Menu historyMenu = new Menu("History"); engine.getHistory().getEntries().addListener( (ListChangeListener.Change c) -> { From 603e167a0bda7dba7c0029e6acec96a7e884cf68 Mon Sep 17 00:00:00 2001 From: Dominik Gruntz Date: Wed, 15 Aug 2018 14:10:43 +0200 Subject: [PATCH 3/3] Fixes the CME exception When an entry is removed from list historyMenu.getItems() in the loop for (MenuItem i : historyMenu.getItems()) { if (i.getId().equals(e.getUrl())) { historyMenu.getItems().remove(i); } } then a CME is thrown. Iterating over a copy fixes this problem. --- .../webview-hello/src/main/java/de/javafxbuch/MainApp.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Kapitel 13/13.1/webview-hello/src/main/java/de/javafxbuch/MainApp.java b/Kapitel 13/13.1/webview-hello/src/main/java/de/javafxbuch/MainApp.java index 7733cb6..62abdb2 100644 --- a/Kapitel 13/13.1/webview-hello/src/main/java/de/javafxbuch/MainApp.java +++ b/Kapitel 13/13.1/webview-hello/src/main/java/de/javafxbuch/MainApp.java @@ -1,5 +1,7 @@ package de.javafxbuch; +import java.util.ArrayList; + import javafx.application.Application; import javafx.collections.ListChangeListener; import javafx.concurrent.Worker.State; @@ -47,7 +49,7 @@ public void start(Stage primaryStage) { (ListChangeListener.Change c) -> { c.next(); for (Entry e : c.getAddedSubList()) { - for (MenuItem i : historyMenu.getItems()) { + for (MenuItem i : new ArrayList<>(historyMenu.getItems())) { if (i.getId().equals(e.getUrl())) { historyMenu.getItems().remove(i); }