Common und CommonUI - nur ein paar Utility-Klassen


#1

Auch wenn

  • das allgemeine Jauchzen und Jubilieren ob der Veröffentlichung meiner Projektchen mich schon fast erdrückt :roll_eyes:
  • diese Beiden eigentlich nicht für die “öffentliche Verwendung” gedacht sind
  • … und sie (teilweise deshalb) (noch) nicht in der Maven Central liegen

eher “der Vollständigkeit halber” ein Hinweis auf diese beiden:

Ein paar allgemeine utility-Klassen, z.B. für XML, oder um Java Beans komplett als XML rauszuschreiben, oder auch ein bißchen was zu Collections oder Iteratoren (Iteratoren über mehrere Iterables, Iteratoren über mehrere Iteratoren, … Iteraception…), oder auch zu concurrency, etwa, um schnell und einfach parallel auf einer “Range” (bzw. einem Array) zu berechnen, oder einen ExecutorService zu erstellen, der Exceptions nicht verschluckt. Nichts, was es nicht auch irgendwo anders gäbe, aber vielleicht findet der eine oder andere ja einen interessanten Schnipsel zum Rauskopieren.

Ein paar allgemeine utility-Klassen für Swing. Da könnte vielleicht auch das eine oder andere nützliche dabei sein, nur kurz aufgelistet:

  • Ein JTree mit Checkboxen und “Tri-State”-Verhalten
  • Ein JTree, der gefiltert werden kann (nicht perfekt, aber für meine Zwecke war’s OK)
  • Utilities, damit man bei einer JTable die Spaltensortierungen vernünftig handhaben kann, und zwar indem man umschalten kann zwischen “Aufsteigend sortiert”, “Absteigend sortiert” und (und das fehlt normalerweise: ) “Gar nicht sortiert”. Das ganze natürlich auch für mehrere Spalten, um mehrere Sortierkriterien angeben zu können, hübsch mit passendem Renderer für den Header, der die Pfeilchen unterschiedlich groß malt und so…
  • Eine Klasse, mit der man in eine JTabbedPane Tabs einfügen kann, die einen “Schließen”-Button haben
  • Ein Klassiker: Ein “CollapsiblePanel”, das man mit einem Klick auf den Rahmen auf- und zuklappen kann
  • Eine (seeeehr experimentelle und vorläufige) Klasse, mit der man normale Layouts auch auf die JInternalFrames eines JDesktopPane anwenden kann
  • Eine “LocationBasedAction”, mit der man das Kontextmenü (z.B. auf einem JTree) dynamisch anpassen kann, je nachdem, wo man es aufgemacht hat
  • Ein utility, mit dem man einen JSpinner so frisieren kann, dass man ihn mit Mausdrags hoch-und runterdrehen kann (und das warppt sogar über die Bildschirmgrenze :cool: )

und natürlich eine handvoll weitere utility-Funktionen.

Nochmal: Das ganze sollte nicht als “öffentliche, stabile API” angesehen werden, aber … ist eben schrittweise entstanden, im Rahmen der Projektchen, an denen ich so bastle, und dient vielleicht als Steinbruch für das eine oder andere nützliche Codeschnipselchen.


Programmierst du noch, oder klickst du schon?
#2

Sie liegen jetzt auch in der Maven Central,


<dependency>
  <groupId>de.javagl</groupId>
  <artifactId>common</artifactId>
  <version>0.0.1</version>
</dependency>

und


<dependency>
  <groupId>de.javagl</groupId>
  <artifactId>common-ui</artifactId>
  <version>0.0.1</version>
</dependency>

Außerdem habe ich Tests für die Table-Sortierungs-Helper und die LocationBasedAction hinzugefügt.


#3

Updates:

<dependency>
  <groupId>de.javagl</groupId>
  <artifactId>common</artifactId>
  <version>0.0.2</version>
</dependency>
<dependency>
  <groupId>de.javagl</groupId>
  <artifactId>common-ui</artifactId>
  <version>0.0.4</version>
</dependency>

Interessant für Außenstehende sind ggf. die AccordionPanel und CollapsiblePanel-Klassen in der UI-Lib. Ich finde, wenn man “viele” GUI-Komponenten hat, ist es toll und praktisch, ein Accordion zu haben, wo man einzelne Panels ein- und ausklappen kann.