JavaFX: MiniIcon(Animation)Button refactored

JavaFX: MiniIcon(Animation)Button refactored

Jonathan Giles wrote in his Blog that

This kind of code should be polished and added to the JFXtras project!

So I thought this would be a good start to learn more about JavaFX internals  and how to do it the right way. There is a talk at parleys where Jasper Potts and Jonathan Giles talk about creating a custom UI control. I wish I had seen this earlier.

1. Learn about the JavaFX seperation of concerns pattern

Like the most UIs, JavaFX has also a seperation of concerns pattern.

2. Refactor the MiniIconButton

So I have to break my

Read More

JavaFX: MiniIconAnimationButton

JavaFX: MiniIconAnimationButton

In the last JavaFX blog post I showed how a button with an glowing effect can be used to catch the users attention. In this blog post I develop a button based on StackPane to have a normal button in the back and an optional animating image icon in the front.

1. UI-Mockup

The code

2.1 Constructor

We need for the button a text, an icon and a mini-icon. As an optional parameter we can set the animation type.

/**  
   * Extended button without an animation
   * @param text button text
   * @param graphic button icon
   * @param notifyImage mini icon
   */
  public MiniIconAnimationButton(String

Read More

GeoCachingFrogger Teil 4 - Nodes und ExplorerManager

GeoCachingFrogger Teil 4 - Nodes und ExplorerManager

Einleitung

Als leidenschaftlicher Geocacher kommt man an einem Punkt an, an dem man gerne komfortabel die Geocaches verwalten und planen möchte. Es gibt dafür einige Tools im Internet, aber ich habe mir überlegt ein eigenes Tool zu schreiben und dabei die NetbeansRCP kennen zu lernen. Ich habe schon einige Swing-Anwendungen entwickelt, aber noch nie mit NetbeansRCP und bin gespannt, was mir die Plattform alles bietet und ob es tatsächlich der einfachere/bessere Weg ist.

Teil4 – Nodes und ExplorerManager

ModelManager

Wie im vorherigen Teil gezeigt, haben wir ein Model Modul in dem das Domain Model abgebildet wird und ein GPX Modul,

Read More

GeoCachingFrogger Teil 3 - Domain Model und GPX Reader

Einleitung

Als leidenschaftlicher Geocacher kommt man an einem Punkt an, an dem man gerne komfortabel die Geocaches verwalten und planen möchte. Es gibt dafür einige Tools im Internet, aber ich habe mir überlegt ein eigenes Tool zu schreiben und dabei die NetbeansRCP kennen zu lernen. Ich habe schon einige Swing-Anwendungen entwickelt, aber noch nie mit NetbeansRCP und bin gespannt, was mir die Plattform alles bietet und ob es tatsächlich der einfachere/bessere Weg ist.

Teil3 – Domain Model und GPX Reader

Domain Model

Damit wir die eingelesenen Daten intern nutzen können, legen wir ein Domain Model an. Dafür haben wir zuvor

Read More

GeoCachingFrogger Teil 2 - Netbeans Projekt aufsetzen

Einleitung

Als leidenschaftlicher Geocacher kommt man an einem Punkt an, an dem man gerne komfortabel die Geocaches verwalten und planen möchte. Es gibt dafür einige Tools im Internet, aber ich habe mir überlegt ein eigenes Tool zu schreiben und dabei die NetbeansRCP kennen zu lernen. Ich habe schon einige Swing-Anwendungen entwickelt, aber noch nie mit NetbeansRCP und bin gespannt, was mir die Plattform alles bietet und ob es tatsächlich der einfachere/bessere Weg ist.

Teil 2 -Aufsetzen eines NetbeansRCP Projekts

Projektstruktur

  • GeocachingFroggerCore
    Die eigentliche Anwendung und UI-Themen finden hier statt.
  • GPX
    In diesem Teilprojekt werden die GPX Dateien verarbeitet (einlesen/

Read More

JavaFX: glowing icon button as an eye-catcher

At sLAB we use glowing icon buttons on the dashboard to get the users attention.

These buttons inform the user that there is some waiting work which has to be finished or some incoming messages are waiting.

Here is a little example:

Override  
public void start(Stage primaryStage) {

    final Image image = new Image(getClass().getResourceAsStream("button.png"));
    final Button button = new Button();
    button.setText("Title");
    button.setGraphic(new ImageView(image));
    button.setContentDisplay(ContentDisplay.TOP);
    button.setTextAlignment(TextAlignment.CENTER);

    final Glow glow = new Glow();
    glow.setLevel(0.0);
    button.setEffect(glow);

    final Timeline timeline = new Timeline();
    timeline.setCycleCount(Timeline.INDEFINITE);
    timeline.

Read More

Lose Kopplung der Open Action (Beispiel von Geertjan Wielenga)

Heute habe ich versucht anhand von Geertjan Wielengas Blogbeitrag eine lose Kopplung der Open Action aus meinem Baum heraus hinzubekommen.

CacheNode

public class CacheNode extends BeanNode {

    public CacheNode(Cache cache) throws IntrospectionException {
        this(cache, new InstanceContent());
    }

    private CacheNode(final Cache cache, final InstanceContent ic) throws IntrospectionException {
        super(cache, Children.LEAF, new AbstractLookup(ic));
        this.setName(cache.getName());
        ic.add(new Openable() {
            @Override
            public void open() {
                ic.add(cache);
                ic.remove(cache);
            }
        });
    }  

    @Override
    public Action[] getActions(boolean context) {
        List cacheActions = (List)Utilities.actionsForPath("Actions/Cache");
        return

Read More