Simplified JavaFX framework for creating basic applications. Now supports JDK 25.
You can manually install or use the GitHub package.
- Clone the repository.
- Execute
./mvnw clean install.
- Locate your local m2 repository
C:\Users\YourUser\.m2\ - Create a new file called
settings.xml - Enter your GitHub credentials.
<servers>
<server>
<id>github</id>
<username>Username</username>
<password>Password</password>
</server>
</servers>The framework is untested for production. Will not work with mobile devices.
AtlantaFX has been integrated into the framework.
Always create a Main class which EXCLUDES javafx components.
public class Main {
static void main(String[] args) {
new App(); // Calls the pre-initialization stage.
Application.launch(App.class); // Calls the initialization stage.
}
}Create your JavaFX entry point.
import me.piitex.engine.fxloader.FXLoad;
import me.piitex.engine.overlays.ButtonBuilder;
import me.piitex.engine.overlays.ButtonOverlay;
public class App extends FXLoad {
/**
* Pre-initialization stage. Load backend components.
*/
@Override
public void preInitialization() {
}
/**
* Initializes the GUI components.
* @param stage Initial JavaFX {@link javafx.stage.Stage}.
*/
@Override
public void initialization(Stage stage) {
// Loads Atlanta css.
Application.setUserAgentStylesheet(new PrimerDark().getUserAgentStylesheet());
Window window = new WindowBuilder("App").setIcon(new ImageLoader(new File(App.getAppDirectory(), "logo.png"))).setDimensions(1920, 1080).build();
// Always store the window as a static singleton. This makes accessing and modifying the window easier.
App.window = window;
// Handle closing the window.
Stage stage = window.getStage();
stage.setOnCloseRequest(windowEvent -> {
Platform.exit();
System.exit(0);
});
// This will create a system tray icon (Optional)
FXTrayIcon icon = new FXTrayIcon(window.getStage(), new File(App.getAppDirectory(), "logo.png"), 128, 128);
// Handle exiting from the icon (Optional)
icon.addExitItem("Exit", e -> {
Platform.exit();
System.exit(0);
});
// Display the icon in the system tray.
icon.show();
// Start building the gui
// Render your first view/container for the application.
Container container = new HomeView();
// Add the container to the window. Calling this function later in the process will allow the container to fully build before displaying.
window.addContainer(container);
}
}Create your first view.
import me.piitex.engine.containers.EmptyContainer;
import me.piitex.engine.overlays.TextOverlay;
public class HomeView extends EmptyContainer {
public HomeView() {
// Build your first view
TextOverlay text = new TextOverlay("Example text");
text.setX(20);
text.setY(20);
addElement(text);
}
}Configure Maven to properly build an executable jar file.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>25</source>
<target>25</target>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<executions>
<execution>
<!-- Default configuration for running with: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
You will need to change this!!!
<mainClass>me.piitex.app.Main</mainClass>
<launcher>app</launcher>
<jlinkZipName>app</jlinkZipName>
<jlinkImageName>app</jlinkImageName>
<noManPages>true</noManPages>
<stripDebug>true</stripDebug>
<noHeaderFiles>true</noHeaderFiles>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>character-chat-app</finalName>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
ALSO CHANGE THIS
<mainClass>me.piitex.app.Main</mainClass>
</transformer>
<!-- Need for Ikonli fonts to work -->
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/jasperreports_extension.properties</include>
<include>**/tecsofti-fonts.xml</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>This is licensed under MIT.
Copyright 2025, RenEngine
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.