bailuk/java-gtk

GTK bindings for Java

Kotlin

145

450 commits

updated Jul 27, 2025

See the code

README

Build on Debian Build on Fedora Build on Ubuntu Build on Windows JitPack

Java-GTK

GTK 4 bindings for Java. It uses Java Native Access (JNA) to access GTK libraries.

POC screenshot

Example

package examples;

import ch.bailu.gtk.gio.ApplicationFlags;
import ch.bailu.gtk.gtk.Application;
import ch.bailu.gtk.gtk.ApplicationWindow;
import ch.bailu.gtk.gtk.Button;
import ch.bailu.gtk.type.Strs;

public class HelloWorld {
    public static void main(String[] args) {
        var app = new Application("com.example.hello",
                ApplicationFlags.FLAGS_NONE);

        app.onActivate(() -> {
            // Create a new window
            var window = new ApplicationWindow(app);

            // Create a new button
            var button = new Button();

            // Set button label
            button.setLabel("Hello, World!");

            // When the button is clicked, close the window
            button.onClicked(window::close);

            window.setChild(button);
            window.show();
        });

        // Start application main loop
        var result = app.run(args.length, new Strs(args));

        // Terminate with exit code
        System.exit(result);
    }
}

Build and run

./gradlew generate or make gen
Compiles and runs the code generator. This will generate Java code from GIR files.

./gradlew build or make
Creates library, javadoc and run tests

  • Output: jar, javadoc.jar and sources.jar in libray/build/libs/

./gradlew run or make run
Run the default demo application. There are more demo applications in examples/src/main/java/examples including GeoClue2 and Adwaita samples.

make install
Compile Java library, generate JAR archive and copy JAR archive as artifact to local Maven repository (~/.m2/repository).

Integration

Library and Javadoc is available via JitPack.

// build.gradle.kts
plugins {
    application
}

repositories {
    maven { url = uri("https://jitpack.io") }
}

dependencies {
    implementation("com.github.bailuk:java-gtk:0.6.1")
}

application {
    mainClass.set("examples.HelloWorld")
}

Modules

  • generator/: Kotlin application that generates Java code from GIR files (xml parser -> model builder -> writer). GIR files are taken from Debian dev packages.
  • java-gtk/ : java-gtk library depends on generated Java code.
  • examples/ : Some examples to test the bindings. Mostly ported from https://gitlab.gnome.org/GNOME/gtk/-/tree/main/demos/gtk-demo.

License

gtk4
gtk-java
java
library

Contributors

bailuk

448 commits

JCWasmx86

2 commits

bailuk/java-gtk

GTK bindings for Java

Kotlin

145

450 commits

updated Jul 27, 2025

See the code

README

Build on Debian Build on Fedora Build on Ubuntu Build on Windows JitPack

Java-GTK

GTK 4 bindings for Java. It uses Java Native Access (JNA) to access GTK libraries.

POC screenshot

Example

package examples;

import ch.bailu.gtk.gio.ApplicationFlags;
import ch.bailu.gtk.gtk.Application;
import ch.bailu.gtk.gtk.ApplicationWindow;
import ch.bailu.gtk.gtk.Button;
import ch.bailu.gtk.type.Strs;

public class HelloWorld {
    public static void main(String[] args) {
        var app = new Application("com.example.hello",
                ApplicationFlags.FLAGS_NONE);

        app.onActivate(() -> {
            // Create a new window
            var window = new ApplicationWindow(app);

            // Create a new button
            var button = new Button();

            // Set button label
            button.setLabel("Hello, World!");

            // When the button is clicked, close the window
            button.onClicked(window::close);

            window.setChild(button);
            window.show();
        });

        // Start application main loop
        var result = app.run(args.length, new Strs(args));

        // Terminate with exit code
        System.exit(result);
    }
}

Build and run

./gradlew generate or make gen
Compiles and runs the code generator. This will generate Java code from GIR files.

./gradlew build or make
Creates library, javadoc and run tests

  • Output: jar, javadoc.jar and sources.jar in libray/build/libs/

./gradlew run or make run
Run the default demo application. There are more demo applications in examples/src/main/java/examples including GeoClue2 and Adwaita samples.

make install
Compile Java library, generate JAR archive and copy JAR archive as artifact to local Maven repository (~/.m2/repository).

Integration

Library and Javadoc is available via JitPack.

// build.gradle.kts
plugins {
    application
}

repositories {
    maven { url = uri("https://jitpack.io") }
}

dependencies {
    implementation("com.github.bailuk:java-gtk:0.6.1")
}

application {
    mainClass.set("examples.HelloWorld")
}

Modules

  • generator/: Kotlin application that generates Java code from GIR files (xml parser -> model builder -> writer). GIR files are taken from Debian dev packages.
  • java-gtk/ : java-gtk library depends on generated Java code.
  • examples/ : Some examples to test the bindings. Mostly ported from https://gitlab.gnome.org/GNOME/gtk/-/tree/main/demos/gtk-demo.

License

gtk4
gtk-java
java
library

Contributors

bailuk

448 commits

JCWasmx86

2 commits

Languages

Kotlin

55.4%

Java

42.4%