A JavaFX library containing tiles that can be used for dashboards.

Overview

TilesFX

A JavaFX library containing tiles for Dashboards.

Donations are welcome at Paypal

Intro

The Tile is a simple JavaFX Control that comes with different skins. To get an idea on how to use the skins with their parameters you could either take a look at the Demo file or check out the TilesFX Demo project which also contains information on how to combine TilesFX with other libraries e.g. Medusa You can also check my blog where you will find additional information about certain tiles.

Demo

To run the demo you simply can start it using the command "./gradlew Demo" on the command line in the project folder.

Overview

Overview

Credits

Flag icons made by Freepik from www.flaticon.com
Comments
  • How to properly add a ScrollPane to LeaderBoardTile ? (Issue in video and code)

    How to properly add a ScrollPane to LeaderBoardTile ? (Issue in video and code)

    Hey Han, I hope you are doing OK with this quarantine. Your library is great.

    Im having a small issue and after hours trying different things I was able to.. make a stupid 'sort-of-fix' that really doesnt fix it, so I need help!


    Issue: When the leaderboardTile has more than 4 items, they glitch. Adding a scrollpane helps to fix that issue, however, when the tile is resized, the fonts resize with it causing the scrollpane to glitch depending on the X value of 'scrollpane.setMinHeight(X);

    Video of issue happening: https://www.youtube.com/watch?v=jq_-hzEiFsw&feature=youtu.be

    The code below was made using the tilesfx, latest version '11.38' and was based on the TilesFX Demo included in the library.

    [](/*
     * Copyright (c) 2017 by Gerrit Grunwald
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package eu.hansolo.tilesfx;
    
    import eu.hansolo.tilesfx.Tile.SkinType;
    import eu.hansolo.tilesfx.skins.LeaderBoardItem;
    import eu.hansolo.tilesfx.tools.FlowGridPane;
    import java.util.ArrayList;
    import javafx.application.Application;
    import javafx.geometry.Insets;
    import javafx.geometry.Pos;
    import javafx.scene.Scene;
    import javafx.scene.control.ScrollPane;
    import javafx.scene.layout.Background;
    import javafx.scene.layout.BackgroundFill;
    import javafx.scene.layout.CornerRadii;
    import javafx.scene.paint.Color;
    import javafx.stage.Stage;
    
    /**
     * User: hansolo Date: 19.12.16 Time: 12:54
     */
    public class Demo_1 extends Application {
    
        private static final double TILE_WIDTH = 150;
        private static final double TILE_HEIGHT = 150;
    
        private LeaderBoardItem leaderBoardItem1;
        private LeaderBoardItem leaderBoardItem2;
        private LeaderBoardItem leaderBoardItem3;
        private LeaderBoardItem leaderBoardItem4;
        private LeaderBoardItem leaderBoardItem5;
        private LeaderBoardItem leaderBoardItem6;
        private LeaderBoardItem leaderBoardItem7;
    
        private Tile leaderBoardTile;
        private Tile leaderBoardTile1;
    
        @Override
        public void init() {
            // LeaderBoard Items
            leaderBoardItem1 = new LeaderBoardItem("Gerrit", 47);
            leaderBoardItem2 = new LeaderBoardItem("Sandra", 43);
            leaderBoardItem3 = new LeaderBoardItem("Lilli", 32);
            leaderBoardItem4 = new LeaderBoardItem("Anton", 20);
            leaderBoardItem5 = new LeaderBoardItem("AH", 10);
            leaderBoardItem6 = new LeaderBoardItem("QW", 6);
            leaderBoardItem7 = new LeaderBoardItem("GF", 0);
    
            ArrayList<LeaderBoardItem> list = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                list.add(new LeaderBoardItem("A" + i, (i * Math.random())));
            }
    
            ArrayList<LeaderBoardItem> list1 = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                list1.add(new LeaderBoardItem("A" + i, (i * Math.random())));
            }
    
            leaderBoardTile = TileBuilder.create()
                    .skinType(SkinType.LEADER_BOARD)
                    .prefSize(TILE_WIDTH, TILE_HEIGHT)
                    .title("LeaderBoard Tile")
                    .text("Whatever text")
                    .leaderBoardItems(list)
                    .build();
    
            leaderBoardTile1 = TileBuilder.create()
                    .skinType(SkinType.LEADER_BOARD)
                    .prefSize(TILE_WIDTH, TILE_HEIGHT)
                    .title("LeaderBoard Tile")
                    .text("Whatever text")
                    .leaderBoardItems(list1)
                    .build();
    
            leaderBoardTile.setMinHeight(1200);
            leaderBoardTile.setPrefHeight(300);
    
        }
    
        @Override
        public void start(Stage stage) {
    
            ScrollPane sp = new ScrollPane(leaderBoardTile);
    
            sp.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
            sp.setHbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
            sp.setContent(leaderBoardTile);
            sp.setFitToWidth(true);
            sp.setFitToHeight(true);
    
            FlowGridPane pane = new FlowGridPane(2, 1, sp, leaderBoardTile1);
    
            pane.setHgap(5);
            pane.setVgap(5);
            pane.setAlignment(Pos.CENTER);
            pane.setCenterShape(true);
            pane.setPadding(new Insets(5));
            pane.setPrefSize(800, 600);
            pane.setBackground(new Background(new BackgroundFill(Color.web("#101214"), CornerRadii.EMPTY, Insets.EMPTY)));
    
            Scene scene = new Scene(pane);
    
            stage.setTitle("Test");
            stage.setScene(scene);
            stage.show();
    
        }
    
        @Override
        public void stop() {
    
            System.exit(0);
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    )
    

    Any ideas on how to fix this issue? How Do I make the scrollpane adapt to the tile size? And how do I stop the tile from increasing the font size? I tried CSS but it doesnt work.

    Han, thanks for any help you can give.

    bug 
    opened by KenobySky 22
  • tresholdProperty can not be used with binding

    tresholdProperty can not be used with binding

    Given following code:

    DoubleProperty temperature = new SimpleDoubleProperty();
    DoubleProperty temperatureTarget = new SimpleDoubleProperty();
    
    var tempTile = TileBuilder.create()
                    .skinType(Tile.SkinType.GAUGE)
                    .prefSize(200, 200)
                    .title("Temperature")
                    .unit("°C")
                    .maxValue(150)
                    .build();
    tempTile.valueProperty().bind(temperature);
    tempTile.tresholdProperty().bind(temperatureTarget);
    

    Any change in temperature is showing as expected in the tile.

    But the tresholdProperty throws:

    Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: Tile.threshold : A bound value cannot be set.
    	at javafx.base/javafx.beans.property.DoublePropertyBase.set(DoublePropertyBase.java:144)
    	at eu.hansolo.tilesfx.Tile.setThreshold(Tile.java:1363)
    	at eu.hansolo.tilesfx.Tile.setMaxValue(Tile.java:1283)
    	at eu.hansolo.tilesfx.Tile.calcAutoScale(Tile.java:4240)
    	at eu.hansolo.tilesfx.skins.GaugeTileSkin.initGraphics(GaugeTileSkin.java:95)
    	at eu.hansolo.tilesfx.skins.TileSkin.<init>(TileSkin.java:132)
    	at eu.hansolo.tilesfx.skins.GaugeTileSkin.<init>(GaugeTileSkin.java:86)
    	at eu.hansolo.tilesfx.Tile.createDefaultSkin(Tile.java:6200)
    
    opened by FDelporte 11
  • Unable to use more than one Smoke tiles

    Unable to use more than one Smoke tiles

    Hi Hansolo Lovers, I have developed a JAVAFX Interface using 6 smoke tiles, when I try to pas values to each smoke tile, only one tile starts showing animation, nothing happen with other 5 tiles. What supposed to be wrong with this? I think the issue with multiple timers, Like when I opened the Tile core class I found there is a dedicated timer running to show animation. So when I start 6 tiles at same time it might be possible other timers unable to show animation. Am I right? any help would be appreciated.

    bug 
    opened by Ghazanfar373 9
  • error trying to run TilesFX

    error trying to run TilesFX

    Hi Gerrit,

    I should state right up front, I am a novice but making headway...:>)

    I started with SteelSeries for use on a monitoring system I am creating for my boat using a bunch of esp32s MQTTing to Rasp Pi running node-red. Loved your gauges and got SteelSeries working on my node-Red dashboard with the aide of Pete Scargill's wonderful tech blog.

    I then moved on to your medusa library and have the latest demo finally, (all my part of my learning process :>) running after getting past my last hurdle related to not having a sonatypesuername and password.

    Then I saw your tilesFX and it looks to be exactly what I want for my boat dashboard. I used Intellij's github tool, which I used to get medusa and other demo's of yours running, to bring tilesFX into my environment, however, when I do "gradle Demo" it pops an error:

    TileFX Error

    I am sure it is something in my configuration but have not found a solution after much hunting.

    Any guidance would be greatly appreciated.

    Thanks again for your wonderful creations! Tim Connolly St Petersburg, FL

    opened by topcorner18 9
  • Created LED tile

    Created LED tile

    Added a tile skin with a simple LED with on/off states. ON -> enabled when value is set to a value other than 0 OFF -> set when value is 0

    The color of the LED can be changed via the "activeColor" property.

    opened by alessandroRoaro 9
  • Error while creating mapTile

    Error while creating mapTile

    Hey

    Any idea why this error is thrown?

    Exception in thread "JavaFX Application Thread" netscape.javascript.JSException: TypeError: undefined is not a function (evaluating 'document.changeMapProvider(window.provider)')
    	at com.sun.webkit.dom.JSObject.fwkMakeException(JSObject.java:128)
    	at com.sun.webkit.WebPage.twkExecuteScript(Native Method)
    	at com.sun.webkit.WebPage.executeScript(WebPage.java:1439)
    	at javafx.scene.web.WebEngine.executeScript(WebEngine.java:982)
    	at eu.hansolo.tilesfx.skins.MapTileSkin.lambda$changeMapProvider$15(MapTileSkin.java:326)
    	at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294)
    	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    	at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    	at com.sun.glass.ui.gtk.GtkApplication.lambda$null$50(GtkApplication.java:139)
    	at java.lang.Thread.run(Thread.java:745)
    

    This is a portion of my code:

    private static Tile mapTile;
    
    public static void main(String[] args) throws IOException {
    		
    		log.info("Application started");
    		
    		// Show UI
        	launch(args);
    	}
    	
    	@Override
    	public void init() {
    		
    		// Initialisation
    		mapTile = TileBuilder.create()
                    .skinType(SkinType.MAP)
                    .prefSize(360, 250)
                    .title("Map")
                    .textVisible(false)
                    .mapProvider(MapProvider.TOPO)
                    .build();
    		
    	}
    
        @Override
        public void start(Stage primaryStage)
    	{
    // The main holder
    	    	VBox root = new VBox();
    	    	root.setPadding(new Insets(5));
    	    	root.setSpacing(10);
    ...
    // Shape
    	    	VBox shape = new VBox();
    	    	shape.setSpacing(5);
    	    	main.getChildren().add(shape);
    	    	
    	    	shape.getChildren().add(mapTile);
    	    		    	
    	    	// Open the UI
    	        primaryStage.setScene(new Scene(root, 1000, 800));
    	        primaryStage.show();
    }
    
    opened by FDelporte 9
  • Wrong Y axis values on Spark Line Tile when low is different than 0

    Wrong Y axis values on Spark Line Tile when low is different than 0

    Hi Gerrit, I found some issues while playing around with the Spark Line skin. It seems that the position of the Y ticks are calculated based on the low value. This causes issues, because the higher the low value is, the lower the ticks will go (eventually going out of the tile), while if the value moves lower then the ticks will shift up. I also noticed that the ticks labels are wrong when starting fresh, by setting min and max values to the tile. I guess it's due to the same thing.

    Please see these screenshots as they give a clear description of this behaviour:

    5 4 2 1 3

    Another smaller thing - sometimes when the tile gets resized, the upper tick moves in a wrong position (last screenshot). If you'd like to try this out, I made a demo with a resizable tile, and an input dialog to set the values manually. I'm attaching the code.

    I tried to fix this issue myself, but I decided to post it here after I realized that some bigger changes may be needed. Please let me know if you need anything.

    Cheers!

    Alessandro

    public class SingleDemo extends Application {
    
        private static final Random RND = new Random();
    
    
        public static void main (String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage stage) throws Exception {
            Tile sparkLineTile = TileBuilder.create()
                    .skinType(Tile.SkinType.SPARK_LINE)
    //                                   .prefSize(TILE_WIDTH, TILE_HEIGHT)
                    .title("SparkLine Tile")
                    .unit("mb")
                    .gradientStops(new Stop(0, Tile.GREEN),
                            new Stop(0.5, Tile.YELLOW),
                            new Stop(1.0, Tile.RED))
                    .strokeWithGradient(true)
                    .averagingPeriod(40)
                    .minValue(100)
                    .maxValue(300)
    //                .autoScale(false)
                    //.smoothing(true)
                    .build();
    
            TextField input = new TextField();
    
            Button button = new Button("Click Me");
            button.setOnAction(evt -> {
                sparkLineTile.setValue(Double.parseDouble(input.getText()));
                input.selectAll();
            });
    
            input.setOnKeyPressed(evt -> {
                if (evt.getCode() == KeyCode.ENTER) {
                    button.fire();
                }
            });
    
            Dialog inputDialog = new Dialog();
            inputDialog.setWidth(200);
            inputDialog.setGraphic(new VBox(input, button));
            inputDialog.getDialogPane().setPrefWidth(200);
            inputDialog.show();
            
            Scene scene = new Scene(sparkLineTile);
    
            stage.setScene(scene);
            stage.show();
        }
    }
    
    bug 
    opened by alessandroRoaro 8
  • LineChart hide Axis

    LineChart hide Axis

    Hi, I would like to know if it is currently possible to hide the x/y axis of the chart. I am using a timestamp format with milliseconds and this takes up a lot of tile space and cannot seem to find a method to hide it. I know the standard line chart uses the following:

    xAxis.setTickLabelsVisible(false);
    yAxis.setTickLabelsVisible(false);
    
    opened by samuellim18 7
  • class file has wrong version 55.0, should be 52.0

    class file has wrong version 55.0, should be 52.0

    Hi, I have the following error when running the demo in intellij: Error:(1, 26) java: cannot access eu.hansolo.tilesfx.Tile bad class file: /C:/Users/Sam Lim/Downloads/jar_files/tilesfx-11.36.jar!/eu/hansolo/tilesfx/Tile.class class file has wrong version 55.0, should be 52.0 Please remove or make sure it appears in the correct subdirectory of the classpath.

    is there a fix for this?

    EDIT:

    I was also wondering if the tiles can be dragged around to rearrange when running ?

    opened by samuellim18 7
  • Cannot run TilesFX (11.1+ to 11.13) on openJDK 11 or OpenJDK 12

    Cannot run TilesFX (11.1+ to 11.13) on openJDK 11 or OpenJDK 12

    ISSUE OVERVIEW

    Greetings,

    Han solo, first of all great nickname. Your API is awesome. Im using the version 1.6.8 on an old JDK 8 build. However, it has a few bugs, for example, when I try to update the radar chart with new data, it wont update the UI, which forces me to remove the radar chart and create a new one.(version 1.6.8).

    To solve that,I've decided to update to version 11.13. However, Im not being able to run the program.


    Reproducibility

    Main Issue: -Add this to pom.xml:

    <dependency>
                <groupId>eu.hansolo</groupId>
                <artifactId>tilesfx</artifactId>
                <version>11.13</version>
            </dependency>
    

    Remove it from POM and it works fine.

    -Windows 10 x64 -OpenJDK 11 -Netbeans Apache -Maven non Modular (https://github.com/openjfx/samples/tree/3bc6ba28eea0ee438320d1045e10da28c216e929)

    Error:

    > ------------------------< org.openjfx:HelloFX >-------------------------
    > Building HelloFX 1.0-SNAPSHOT
    > --------------------------------[ jar ]---------------------------------
    > 
    > --- javafx-maven-plugin:0.0.3:run (default-cli) @ HelloFX ---
    > Graphics Device initialization failed for :  d3d, sw
    > Error initializing QuantumRenderer: no suitable pipeline found
    > java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    > 	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
    > 	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:243)
    > 	at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
    > 	at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
    > 	at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
    > 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
    > 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
    > 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    > 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    > 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    > 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    > 	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    > 	at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
    > Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    > 	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
    > 	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
    > 	at java.base/java.lang.Thread.run(Thread.java:835)
    > Exception in thread "main" java.lang.reflect.InvocationTargetException
    > 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    > 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    > 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    > 	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    > 	at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
    > Caused by: java.lang.RuntimeException: No toolkit found
    > 	at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
    > 	at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
    > 	at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
    > 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
    > 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
    > 	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    > 	... 5 more
    > Command execution failed.
    > org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    >     at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404)
    >     at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
    >     at org.openjfx.JavaFXBaseMojo.executeCommandLine (JavaFXBaseMojo.java:491)
    >     at org.openjfx.JavaFXBaseMojo.executeCommandLine (JavaFXBaseMojo.java:453)
    >     at org.openjfx.JavaFXRunMojo.execute (JavaFXRunMojo.java:97)
    >     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    >     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
    >     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    >     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    >     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    >     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    >     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    >     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    >     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    >     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    >     at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    >     at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
    >     at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    >     at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    >     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    >     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    >     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    >     at java.lang.reflect.Method.invoke (Method.java:566)
    >     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    >     at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    >     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    >     at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    > org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    > 	at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:404)
    > 	at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:166)
    > 	at org.openjfx.JavaFXBaseMojo.executeCommandLine(JavaFXBaseMojo.java:491)
    > 	at org.openjfx.JavaFXBaseMojo.executeCommandLine(JavaFXBaseMojo.java:453)
    > 	at org.openjfx.JavaFXRunMojo.execute(JavaFXRunMojo.java:97)
    > 	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
    > 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    > 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
    > 	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
    > 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
    > 	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
    > 	at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
    > 	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    > 	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
    > 	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
    > 	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
    > 	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:954)
    > 	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    > 	at org.apache.maven.cli.MavenCli.main(MavenCli.java:192)
    > 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    > 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    > 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    > 	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    > 	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
    > 	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
    > 	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
    > 	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
    > ------------------------------------------------------------------------
    > BUILD FAILURE
    > ------------------------------------------------------------------------
    > Total time: 3.309 s
    > Finished at: 2019-10-02T10:35:42-03:00
    > ------------------------------------------------------------------------
    > Failed to execute goal org.openjfx:javafx-maven-plugin:0.0.3:run (default-cli) on project HelloFX: Error: Command execution failed. Process exited with an error: 1 (Exit value: 1) -> [Help 1]
    > 
    > To see the full stack trace of the errors, re-run Maven with the -e switch.
    > Re-run Maven using the -X switch to enable full debug logging.
    > 
    > For more information about the errors and possible solutions, please read the following articles:
    > [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
    > 
    
    

    Repository for reproducibility: https://bitbucket.org/andrelopes1705/tilesrepr/src/default/

    opened by KenobySky 7
  • Cannot  find symbol method getCenterY() in TimelineTileSkin.java

    Cannot find symbol method getCenterY() in TimelineTileSkin.java

    C:\Users\ASUS\Downloads\tilesfx-master\src\main\java\eu\hansolo\tilesfx\skins\TimelineTileSkin.java:934: error: cannot find symbol entry.getValue().relocate(size * 0.05, sections.get(entry.getKey()).getLayoutBounds().getCenterY() - entry.getValue().getLayoutBounds().getCenterY()); ^ symbol: method getCenterY() location: class Bounds

    opened by russo1712 6
  • Tile css is getting overridden

    Tile css is getting overridden

    In my application, I have been using TilesFX (17.1.9). I have also specified .root selector as follows:

    .root {
        -fx-font-size  : 11.0pt;
        -fx-font-family: 'Gill Sans';
    }
    

    This works perfectly for the application but somehow it behaves quite strange for TileFX. When the application starts, the tiles use the CSS embedded in the TilesFX library and when the application goes into background and comes again to foreground, the Tiles start using the CSS specified in the root node (.root).

    I would like to use the CSS embedded within the library all the time. Is there any way to fix this issue that even if the application goes to background, the tiles will keep on using the CSS from the TilesFX library and stay consistent always.

    Screenshot after application starts: Screenshot 2022-04-26 at 20 32 59

    Screenshot after application goes to background and returns to foreground: Screenshot 2022-04-26 at 20 33 11

    opened by amitjoy 8
  • Tooltips on Data Points

    Tooltips on Data Points

    Hi Gerrit

    If you create a Tile with a XYChart in it (Line or Area, doesn't matter) you can use JavaFX's XYChart.Data class to add items to the graph. In its documentation it is stated, that the node for each data point is required to be set manually either before you add it to the series it belongs to, or it will be automatically created. But in the library that seems not to be the case, therefore we are not able to set a tooltip on a point.

    Here's a simple example to test it (tested against version 16.0.3):

    import eu.hansolo.tilesfx.Tile;
    import eu.hansolo.tilesfx.TileBuilder;
    import eu.hansolo.tilesfx.chart.TilesFXSeries;
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.chart.XYChart;
    import javafx.scene.control.Label;
    import javafx.scene.control.Tooltip;
    import javafx.scene.layout.VBox;
    import javafx.scene.paint.Color;
    import javafx.scene.text.TextAlignment;
    import javafx.stage.Stage;
    
    import java.util.Optional;
    import java.util.Random;
    
    public class ChartTest extends Application {
    
        @Override
        public void start(Stage stage) throws Exception {
    
            var tile = TileBuilder.create().skinType(Tile.SkinType.SMOOTHED_CHART).chartType(Tile.ChartType.LINE).backgroundColor(Color.TRANSPARENT)
                    .unitColor(Color.GRAY).valueColor(Color.GRAY).tickLabelColor(Color.GRAY).minSize(150.0, 250.0).prefSize(150.0, 250.0).build();
            tile.getXAxis().setLabel("X Axis");
            tile.getYAxis().setLabel("Y Axis");
    
            Optional.ofNullable(tile.getXAxis().lookup(".axis-label")).ifPresent(it -> {
                if (it instanceof Label l)
                    l.setTextAlignment(TextAlignment.CENTER);
            });
            Optional.ofNullable(tile.getYAxis().lookup(".axis-label")).ifPresent(it -> {
                if (it instanceof Label l)
                    l.setTextAlignment(TextAlignment.CENTER);
            });
    
            var seriesA = new XYChart.Series<String, Number>();
            seriesA.setName("A");
    
            var seriesB = new XYChart.Series<String, Number>();
            seriesB.setName("B");
    
            tile.setTilesFXSeries(new TilesFXSeries<>(seriesA, Color.RED), new TilesFXSeries<>(seriesB, Color.GREEN));
    
            seriesA.getData().add(new XYChart.Data("", 0));
            seriesB.getData().add(new XYChart.Data("", 0));
    
            var r = new Random();
            for (int i = 1; i < 10; i++) {
                seriesA.getData().add(new XYChart.Data("" + i, r.nextInt(100)));
                seriesB.getData().add(new XYChart.Data("" + i, r.nextInt(100)));
            }
    
            for (var data : seriesA.getData()) {
                System.err.println(data.getNode());
                // from the documentation you can either set a node, before adding the data to the series
                // OR: it should be provided by the implementation (like a bullet or something)
                
                // Tooltip installation will fail silently, since data.getNode() returns null
                // Tooltip.install(data.getNode(), new Tooltip(data.getXValue() + ": " + data.getYValue()));
            }
            for (var data : seriesB.getData()) {
                System.err.println(data.getNode());
            }
    
            var box = new VBox(10.0);
            box.getChildren().add(tile);
    
            var scene = new Scene(box, 500.0, 250.0);
            stage.setScene(scene);
            stage.setMinWidth(500.0);
            stage.setMinHeight(250.0);
    
            stage.show();
        }
    
        public static void main(String[] args) {
            Application.launch(ChartTest.class, args);
        }
    }
    

    Thanks in advance for any tips, hacks or workarounds... :wink:

    Cheers, Daniel

    opened by bgmf 1
  • Level with Fluid Skin

    Level with Fluid Skin

    Hi HanSolo,

    Following the Capacity Skin you have in Medusa. And given the new skin you added in Tiles called Fluid, what about having both in the same? I.e. having a Deposit with fluid as a TileSkin? Thanks.

    opened by antmordel 0
  • Section definition in FXML

    Section definition in FXML

    I am using the 11.45 release with Java 11 and JavaFX 11.

    I want to define the sections of my Gauge in FXML like this:

    <Tile userData="/home/gewaechshaus/temperatur" skinType="GAUGE" lowerThreshold="0.0" referenceValue="20.0" threshold="30.0" thresholdVisible="false" maxValue="50.0" minValue="-20.0" title="Gewächshaus" unit="°C" sectionsVisible="true" sectionsAlwaysVisible="true" highlightSections="true" >
         <sections>
             <Section start="-20" stop="0.0" color="blue" />
             <Section start="0.0" stop="30.0" color="green" />
             <Section start="30.0" stop="50" color="red" />
         </sections>
     </Tile>
    

    Unfortunately, the sections are not used.

    Screenshot 2020-10-01 15:43:46

    Doing the same in code works perfectly fine.

    Tile test = TileBuilder.create()
            .skinType(Tile.SkinType.GAUGE)
            .title("Temp 2")
            .unit("°C")
            .minValue(-20)
            .maxValue(50)
            .value(22.0)
            .threshold(30)
            .thresholdVisible(false)
            .sections(new Section(-20, 0, Tile.BLUE),
                    new Section(0, 30, Tile.GREEN),
                    new Section(30, 50, Tile.RED))
            .sectionsAlwaysVisible(true)
            .sectionsVisible(true)
            .build();
    

    Screenshot 2020-10-01 15:47:51

    Would be really nice to have this in FXML, too.

    enhancement 
    opened by fchrist 0
  • Enhancement Request - Tiles Calendar

    Enhancement Request - Tiles Calendar

    Hi Again Han! Sorry for another issue. The calendar is great but I have a single request enhancements that I think will make it even better.

    • Allow change month and Year like a datepicker.

    Sem título

    enhancement 
    opened by KenobySky 2
Releases(17.1.15)
Owner
Gerrit Grunwald
Gerrit Grunwald
An IDE built specifically for Modding Minecraft Java Edition, containing many useful features that will be helpful for modders.

Modding-IDE An IDE built specifically for Modding Minecraft Java Edition, containing many useful features that will be helpful for modders. Trello: ht

null 11 Jul 16, 2022
An IDE built specifically for Modding Minecraft Java Edition, containing many useful features that will be helpful for modders.

Railroad IDE Railroad IDE is an IDE that is made specifically for Minecraft Development including Forge Mods, and Fabric Mods! This IDE is made to hel

null 25 Dec 8, 2022
A JavaFX library that allows Java2D code (Graphics2D) to be used to draw to a Canvas node.

FXGraphics2D Version 2.1, 3 October 2020. Overview FXGraphics2D is a free implementation of Java's Graphics2D API that targets the JavaFX Canvas. It m

David Gilbert 184 Dec 31, 2022
Tray Icon implementation for JavaFX applications. Say goodbye to using AWT's SystemTray icon, instead use a JavaFX Tray Icon.

FXTrayIcon Library intended for use in JavaFX applications that makes adding a System Tray icon easier. The FXTrayIcon class handles all the messy AWT

Dustin Redmond 248 Dec 30, 2022
DataFX - is a JavaFX frameworks that provides additional features to create MVC based applications in JavaFX by providing routing and a context for CDI.

What you’ve stumbled upon here is a project that intends to make retrieving, massaging, populating, viewing, and editing data in JavaFX UI controls ea

Guigarage 110 Dec 29, 2022
A library of +70 ready-to-use animations for JavaFX

AnimateFX A library of ready-to-use animations for JavaFX Features: Custom animations Custom interpolators Play/Stop animation Play an animation after

Loïc Sculier 366 Jan 5, 2023
A library for JavaFX that gives you the ability to show progress on the Windows taskbar.

A clean and easy way to implement this amazing native Windows taskbar-progressbar functionality in javaFX Background Since Windows 7 there is a taskba

Daniel Gyoerffy 77 Nov 28, 2022
A JavaFX 3D Visualization and Component Library

FXyz3D FXyz3D Core: FXyz3D Client: FXyz3D Importers: A JavaFX 3D Visualization and Component Library How to build The project is managed by gradle. To

null 16 Aug 23, 2020
A library for creating and editing graph-like diagrams in JavaFX.

Graph Editor A library for creating and editing graph-like diagrams in JavaFX. This project is a fork of tesis-dynaware/graph-editor 1.3.1, which is n

Steffen 125 Jan 1, 2023
Provides a Java API to use the JavaScript library d3.js with the JavaFx WebView

javafx-d3 Provides a Java API for using the JavaScript library d3.js with JavaFx Applications. Many thanks to the authors of the projects gwt-d3 [1] a

null 98 Dec 19, 2022
Kubed - A port of the popular Javascript library D3.js to Kotlin/JavaFX.

Kubed: A Kotlin DSL for data visualization Kubed is a data visualization DSL embedded within the Kotlin programming language. Kubed facilitates the cr

Brian Hudson 71 Dec 28, 2022
A 3D chart library for Java applications (JavaFX, Swing or server-side).

Orson Charts (C)opyright 2013-2020, by Object Refinery Limited. All rights reserved. Version 2.0, 15 March 2020. Overview Orson Charts is a 3D chart l

David Gilbert 96 Sep 27, 2022
Flow Visualization Library for JavaFX and VRL-Studio

VWorkflows Interactive flow/graph visualization for building domain specific visual programming environments. Provides UI bindings for JavaFX. See htt

Michael Hoffer 274 Dec 29, 2022
A Javafx Library for building MVC Applications.

A JavaFx Library For Making MVC Type Desktop Applications Installation requires Java jdk > 7 for windows requres openjdk-7 or 8 and openjfx for linux

Obi Uchenna David 38 Apr 30, 2022
RXControls is a JavaFX custom component library.

RXControls RXControls Version 8.x.y need javafx8 RXControls Version 11.x.y need javafx11+ 一个javafx的自定义组件库, 密码可见组件, 轮播图组件, 动态按钮组件等, 音频频谱可视化组件,歌词组件 等...

null 164 Jan 1, 2023
A JavaFX library that contains different kind of charts

Charts A library for scientific charts in JavaFX. This is still a work in development, but here are some of the charts being worked on so far. The cha

Gerrit Grunwald 497 Jan 2, 2023
A 2D chart library for Java applications (JavaFX, Swing or server-side).

JFreeChart Version 2.0.0, not yet released. Overview JFreeChart is a comprehensive free chart library for the Java(tm) platform that can be used on th

David Gilbert 946 Jan 5, 2023
SynchronizeFX - a library for JavaFX 2 and later that enables property bindings between different JVMs

SynchronizeFX - a library for JavaFX 2 and later that enables property bindings between different JVMs, both on a local computer and over the network.

Manuel Mauky 8 Jul 24, 2020
MaterialFX is an open source Java library which provides material design components for JavaFX

MaterialFX MaterialFX is an open source Java library which provides material design components for JavaFX Explore the wiki » Download Latest Demo · Re

Alessadro Parisi 744 Jan 3, 2023