Besseres, universelles Auteilen.

This commit is contained in:
Konrad Neitzel 2025-04-01 22:38:29 +02:00
parent 523a42ceda
commit b289da801a
42 changed files with 151 additions and 99 deletions

View File

@ -5,26 +5,26 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>de.neitzel</groupId> <groupId>de.neitzel.lib</groupId>
<artifactId>neitzelfx</artifactId> <artifactId>neitzellib</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</parent> </parent>
<artifactId>neitzelfx-example</artifactId> <artifactId>fx-example</artifactId>
<properties> <properties>
<link.name>${project.artifactId}</link.name> <link.name>${project.artifactId}</link.name>
<launcher>${project.artifactId}</launcher> <launcher>${project.artifactId}</launcher>
<appName>${project.artifactId}</appName> <appName>${project.artifactId}</appName>
<main.class>de.neitzel.neitzelfx.injectfx.example.Main</main.class> <main.class>de.neitzel.fx.injectfx.example.Main</main.class>
<jar.filename>${project.artifactId}-${project.version}</jar.filename> <jar.filename>${project.artifactId}-${project.version}</jar.filename>
</properties> </properties>
<dependencies> <dependencies>
<!-- NeitzelFX dependency --> <!-- FX dependency -->
<dependency> <dependency>
<groupId>de.neitzel</groupId> <groupId>de.neitzel.lib</groupId>
<artifactId>neitzelfx-lib</artifactId> <artifactId>fx</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.component.example; package de.neitzel.fx.component.example;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;

View File

@ -1,6 +1,6 @@
package de.neitzel.neitzelfx.component.example; package de.neitzel.fx.component.example;
import de.neitzel.neitzelfx.component.ComponentLoader; import de.neitzel.fx.component.ComponentLoader;
import javafx.application.Application; import javafx.application.Application;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;

View File

@ -1,6 +1,4 @@
package de.neitzel.neitzelfx.component.example; package de.neitzel.fx.component.example;
import de.neitzel.neitzelfx.injectfx.example.JavaFXApp;
/** /**
* Another Main class as workaround when the JavaFX Application ist started without * Another Main class as workaround when the JavaFX Application ist started without

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.component.example; package de.neitzel.fx.component.example;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.injectfx.example; package de.neitzel.fx.injectfx.example;
import javafx.application.Application; import javafx.application.Application;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
@ -6,8 +6,6 @@ import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.io.IOException;
public class JavaFXApp extends Application { public class JavaFXApp extends Application {
@Override @Override

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.injectfx.example; package de.neitzel.fx.injectfx.example;
/** /**
* Another Main class as workaround when the JavaFX Application ist started without * Another Main class as workaround when the JavaFX Application ist started without

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.injectfx.example; package de.neitzel.fx.injectfx.example;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;

View File

@ -6,7 +6,7 @@
<AnchorPane xmlns="http://javafx.com/javafx" <AnchorPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml" xmlns:fx="http://javafx.com/fxml"
xmlns:nfx="http://example.com/nfx" xmlns:nfx="http://example.com/nfx"
fx:controller="de.neitzel.neitzelfx.component.ComponentController" fx:controller="de.neitzel.fx.component.ComponentController"
prefWidth="300" prefHeight="100"> prefWidth="300" prefHeight="100">
<children> <children>
<TextField layoutX="10" layoutY="10" prefWidth="280" <TextField layoutX="10" layoutY="10" prefWidth="280"

View File

@ -3,7 +3,7 @@
<?import javafx.scene.control.*?> <?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?> <?import javafx.scene.layout.*?>
<AnchorPane prefHeight="127.0" prefWidth="209.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.neitzel.neitzelfx.injectfx.example.MainWindow"> <AnchorPane prefHeight="127.0" prefWidth="209.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.neitzel.fx.injectfx.example.MainWindow">
<children> <children>
<Button fx:id="button" layoutX="44.0" layoutY="70.0" mnemonicParsing="false" onAction="#onButtonClick" text="Click Me" /> <Button fx:id="button" layoutX="44.0" layoutY="70.0" mnemonicParsing="false" onAction="#onButtonClick" text="Click Me" />
<TextField fx:id="textField" layoutX="14.0" layoutY="24.0" /> <TextField fx:id="textField" layoutX="14.0" layoutY="24.0" />

View File

@ -6,7 +6,7 @@
<AnchorPane xmlns="http://javafx.com/javafx" <AnchorPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml" xmlns:fx="http://javafx.com/fxml"
xmlns:nfx="http://example.com/nfx" xmlns:nfx="http://example.com/nfx"
fx:controller="de.neitzel.neitzelfx.component.ComponentController" fx:controller="de.neitzel.fx.component.ComponentController"
prefWidth="300" prefHeight="180"> prefWidth="300" prefHeight="180">
<children> <children>
<TextField layoutX="10" layoutY="10" prefWidth="280" <TextField layoutX="10" layoutY="10" prefWidth="280"

View File

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

52
fx/pom.xml Normal file
View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>de.neitzel.lib</groupId>
<artifactId>neitzellib</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>fx</artifactId>
<properties>
<!-- Application Properties -->
<link.name>${project.artifactId}</link.name>
<launcher>${project.artifactId}</launcher>
<appName>${project.artifactId}</appName>
<main.class>example.de.neitzel.fx.injectfx.Main</main.class>
<jar.filename>${project.artifactId}-${project.version}</jar.filename>
</properties>
<dependencies>
<dependency>
<groupId>de.neitzel.lib</groupId>
<artifactId>inject</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>${reflections.version}</version>
</dependency>
</dependencies>
<build>
<finalName>${jar.filename}</finalName>
<plugins>
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.component; package de.neitzel.fx.component;
import javafx.beans.property.*; import javafx.beans.property.*;
import java.lang.reflect.*; import java.lang.reflect.*;

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.component; package de.neitzel.fx.component;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.component; package de.neitzel.fx.component;
import javafx.beans.property.Property; import javafx.beans.property.Property;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;

View File

@ -1,4 +1,6 @@
package de.neitzel.neitzelfx.injectfx; package de.neitzel.fx.injectfx;
import de.neitzel.inject.InjectableComponentScanner;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.util.*; import java.util.*;

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.injectfx; package de.neitzel.fx.injectfx;
import javafx.util.Callback; import javafx.util.Callback;

View File

@ -1,5 +1,6 @@
package de.neitzel.neitzelfx.injectfx; package de.neitzel.fx.injectfx;
import de.neitzel.inject.InjectableComponentScanner;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.mvvm; package de.neitzel.fx.mvvm;
/** /**
* Enum representing the direction of data binding between a JavaFX control and a ViewModel property. * Enum representing the direction of data binding between a JavaFX control and a ViewModel property.

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.mvvm; package de.neitzel.fx.mvvm;
import javafx.beans.property.Property; import javafx.beans.property.Property;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.mvvm; package de.neitzel.fx.mvvm;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import java.net.URL; import java.net.URL;

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.mvvm; package de.neitzel.fx.mvvm;
import javafx.beans.property.*; import javafx.beans.property.*;

View File

@ -1,10 +1,11 @@
package de.neitzel.neitzelfx.injectfx; package de.neitzel.fx.injectfx;
import de.neitzel.neitzelfx.injectfx.testcomponents.test1ok.SuperClass; import de.neitzel.fx.injectfx.testcomponents.test1ok.SuperClass;
import de.neitzel.neitzelfx.injectfx.testcomponents.test1ok.TestComponent1_1; import de.neitzel.fx.injectfx.testcomponents.test1ok.TestComponent1_1;
import de.neitzel.neitzelfx.injectfx.testcomponents.test1ok.TestInterface1_1; import de.neitzel.fx.injectfx.testcomponents.test1ok.TestInterface1_1;
import de.neitzel.neitzelfx.injectfx.testcomponents.test1ok.TestInterface1_2; import de.neitzel.fx.injectfx.testcomponents.test1ok.TestInterface1_2;
import de.neitzel.neitzelfx.injectfx.testcomponents.test1ok.sub.TestComponent1_2; import de.neitzel.fx.injectfx.testcomponents.test1ok.sub.TestComponent1_2;
import de.neitzel.inject.InjectableComponentScanner;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;

View File

@ -0,0 +1,4 @@
package de.neitzel.fx.injectfx.testcomponents.test1ok;
public class SuperClass {
}

View File

@ -0,0 +1,9 @@
package de.neitzel.fx.injectfx.testcomponents.test1ok;
import de.neitzel.inject.annotation.Component;
@Component
public class TestComponent1_1 extends SuperClass implements TestInterface1_2 {
public TestComponent1_1() {
}
}

View File

@ -0,0 +1,4 @@
package de.neitzel.fx.injectfx.testcomponents.test1ok;
public interface TestInterface1_1 {
}

View File

@ -0,0 +1,4 @@
package de.neitzel.fx.injectfx.testcomponents.test1ok;
public interface TestInterface1_2 {
}

View File

@ -0,0 +1,12 @@
package de.neitzel.fx.injectfx.testcomponents.test1ok.sub;
import de.neitzel.fx.injectfx.testcomponents.test1ok.SuperClass;
import de.neitzel.fx.injectfx.testcomponents.test1ok.TestInterface1_1;
import de.neitzel.fx.injectfx.testcomponents.test1ok.TestInterface1_2;
import de.neitzel.inject.annotation.Component;
@Component
public class TestComponent1_2 extends SuperClass implements TestInterface1_1, TestInterface1_2 {
public TestComponent1_2() {
}
}

View File

@ -0,0 +1,12 @@
package de.neitzel.fx.injectfx.testcomponents.test2fail;
import de.neitzel.inject.annotation.Component;
/**
* TestComponent1 that should fail.
*/
@Component
public class TestComponent2_1 {
public TestComponent2_1(String test) {
}
}

View File

@ -5,19 +5,18 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>de.neitzel</groupId> <groupId>de.neitzel.lib</groupId>
<artifactId>neitzelfx</artifactId> <artifactId>neitzellib</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</parent> </parent>
<artifactId>neitzelfx-lib</artifactId> <artifactId>inject</artifactId>
<properties> <properties>
<!-- Application Properties --> <!-- Application Properties -->
<link.name>${project.artifactId}</link.name> <link.name>${project.artifactId}</link.name>
<launcher>${project.artifactId}</launcher> <launcher>${project.artifactId}</launcher>
<appName>${project.artifactId}</appName> <appName>${project.artifactId}</appName>
<main.class>example.de.neitzel.neitzelfx.injectfx.Main</main.class>
<jar.filename>${project.artifactId}-${project.version}</jar.filename> <jar.filename>${project.artifactId}-${project.version}</jar.filename>
</properties> </properties>

View File

@ -1,6 +1,6 @@
package de.neitzel.neitzelfx.injectfx; package de.neitzel.inject;
import de.neitzel.neitzelfx.injectfx.annotation.FXMLComponent; import de.neitzel.inject.annotation.Component;
import org.reflections.Reflections; import org.reflections.Reflections;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
@ -8,7 +8,7 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* InjectableComponents scans a package for classes annotated with {@link FXMLComponent}. * InjectableComponents scans a package for classes annotated with {@link Component}.
* It determines which components can be instantiated and manages type mappings for dependency injection. * It determines which components can be instantiated and manages type mappings for dependency injection.
*/ */
public class InjectableComponentScanner { public class InjectableComponentScanner {
@ -46,7 +46,7 @@ public class InjectableComponentScanner {
*/ */
private void scanForComponents(String basePackage) { private void scanForComponents(String basePackage) {
Reflections reflections = new Reflections(basePackage); Reflections reflections = new Reflections(basePackage);
fxmlComponents.addAll(reflections.getTypesAnnotatedWith(FXMLComponent.class)); fxmlComponents.addAll(reflections.getTypesAnnotatedWith(Component.class));
} }
/** /**

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.injectfx.annotation; package de.neitzel.inject.annotation;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
@ -7,5 +7,5 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE) @Target(ElementType.TYPE)
public @interface FXMLComponent { public @interface Component {
} }

View File

@ -1,4 +1,4 @@
package de.neitzel.neitzelfx.injectfx.annotation; package de.neitzel.inject.annotation;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
@ -7,6 +7,6 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE) @Target(ElementType.TYPE)
public @interface FXMLConfig { public @interface Config {
String value() default ""; String value() default "";
} }

View File

@ -1,4 +0,0 @@
package de.neitzel.neitzelfx.injectfx.testcomponents.test1ok;
public class SuperClass {
}

View File

@ -1,9 +0,0 @@
package de.neitzel.neitzelfx.injectfx.testcomponents.test1ok;
import de.neitzel.neitzelfx.injectfx.annotation.FXMLComponent;
@FXMLComponent
public class TestComponent1_1 extends SuperClass implements TestInterface1_2 {
public TestComponent1_1() {
}
}

View File

@ -1,4 +0,0 @@
package de.neitzel.neitzelfx.injectfx.testcomponents.test1ok;
public interface TestInterface1_1 {
}

View File

@ -1,4 +0,0 @@
package de.neitzel.neitzelfx.injectfx.testcomponents.test1ok;
public interface TestInterface1_2 {
}

View File

@ -1,12 +0,0 @@
package de.neitzel.neitzelfx.injectfx.testcomponents.test1ok.sub;
import de.neitzel.neitzelfx.injectfx.annotation.FXMLComponent;
import de.neitzel.neitzelfx.injectfx.testcomponents.test1ok.SuperClass;
import de.neitzel.neitzelfx.injectfx.testcomponents.test1ok.TestInterface1_1;
import de.neitzel.neitzelfx.injectfx.testcomponents.test1ok.TestInterface1_2;
@FXMLComponent
public class TestComponent1_2 extends SuperClass implements TestInterface1_1, TestInterface1_2 {
public TestComponent1_2() {
}
}

View File

@ -1,12 +0,0 @@
package de.neitzel.neitzelfx.injectfx.testcomponents.test2fail;
import de.neitzel.neitzelfx.injectfx.annotation.FXMLComponent;
/**
* TestComponent1 that should fail.
*/
@FXMLComponent
public class TestComponent2_1 {
public TestComponent2_1(String test) {
}
}

View File

@ -4,15 +4,16 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>de.neitzel</groupId> <groupId>de.neitzel.lib</groupId>
<artifactId>neitzelfx</artifactId> <artifactId>neitzellib</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<modules> <modules>
<module>neitzelfx-lib</module> <module>inject</module>
<module>neitzelfx-example</module> <module>fx</module>
<module>fx-example</module>
</modules> </modules>
<properties> <properties>