Java import-Fehler von QName

Die Umstellung von Java 8 auf Java 9+ ist ja sowieso schon mühselig, wenn man aber ganz exotische Fehler bekommt…

Bei mir ging folgender Import nicht:

import javax.xml.namespace.QName;

Erstaunlicherweise ist QName eine Java-Standardklasse, sie wurde per Autocomplete auch gefunden, dann aber als not found gekennzeichnet.

Der Fehler war, dass im Classpath die Maven-Abhängigkeiten vor der JRE-Library standen. Wenn man das ändert (in eclipse bei Java Build Path und Order/Export vertauschen, auch wenn die nicht angekreuzt sind!), dann funktioniert es wieder.

WTF?

Offensichtlich schießt eine Maven-Abhängigkeit da quer, die aber erst beim Kompilieren zuschlägt. Wie soll man da drauf kommen.

Zum Glück gibt es StackOverflow, aber auch dort nur eine Antwort zum Thema. Kann sogar sein, dass das erst ab Java 10 oder 11 auftritt, so genau hab ich nicht geforscht.

Also nochmal: WTF?

Get checked items of a TreeView in JavaFX

JavaFX provides an easy way to implement Java GUIs. Unfortunately, some methods or concepts are missing.

I used a TreeView component with CheckBoxTreeItems. When evaluating the input I want to get all checked items from the TreeView, resp. its SelectionModel.

The standard method getSelectedItems just returns the selected items, when selecting means the last clicked (i.e. selected) element.

Thus I had to write my own code for traversing the tree and collecting all checked elements. This is not difficult, but a bit tiresome, as there are many methods missing that have to be implemented.

If you’re interested in the code, see

https://gitlab.com/ekleinod/edgeutils/blob/master/edgeutils/src/main/java/de/edgesoft/edgeutils/javafx/TreeViewUtils.java

for my implementation. As I state in the documentation, using Kotlin should provide means to extend the TreeView class itself, but this is future talk.