Compare commits
7 Commits
eedf066993
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c4291c2746 | |||
| a2349837be | |||
| 00b8ccc689 | |||
| fc3b0e5de8 | |||
| a3f4fec8b6 | |||
|
|
d7ff1e68a7 | ||
|
|
6dd1d5bd69 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -3,3 +3,4 @@
|
|||||||
/buildSrc/build/
|
/buildSrc/build/
|
||||||
/.idea/
|
/.idea/
|
||||||
/build/
|
/build/
|
||||||
|
/**/build/
|
||||||
|
|||||||
29
LICENSE
Normal file
29
LICENSE
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
BSD 3-Clause License
|
||||||
|
|
||||||
|
Copyright (c) 2021, Elex
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
6
README.md
Normal file
6
README.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# JavaFX Examples
|
||||||
|
|
||||||
|
------
|
||||||
|
developed by Elex
|
||||||
|
|
||||||
|
https://www.elex-project.com/
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id("elex-application")
|
|
||||||
}
|
|
||||||
application{
|
|
||||||
mainClass.set("com.elex_project.sample.Application")
|
|
||||||
}
|
|
||||||
dependencies {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
package com.elex_project.sample;
|
|
||||||
@@ -1,14 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* JavaFx Examples
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
maven {
|
maven {
|
||||||
url = uri("https://repository.elex-project.com/repository/maven")
|
name = "Nexus 3 Repository"
|
||||||
|
url = uri(project.findProperty("repo.url") as String)
|
||||||
|
credentials {
|
||||||
|
username = project.findProperty("repo.username") as String
|
||||||
|
password = project.findProperty("repo.password") as String
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dependencies {
|
|
||||||
classpath ("com.jaredsburrows:gradle-license-plugin:0.8.90")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
plugins {
|
plugins {
|
||||||
id("com.github.ben-manes.versions") version "0.39.0"
|
base
|
||||||
|
id("com.github.ben-manes.versions") version "0.51.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
subprojects{
|
||||||
|
group = "com.elex-project"
|
||||||
|
version = "1.0-SNAPSHOT"
|
||||||
|
description = ""//todo
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* JavaFx Examples
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
plugins{
|
plugins{
|
||||||
`kotlin-dsl`
|
`kotlin-dsl`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("elex-base")
|
id("elex-base")
|
||||||
application
|
application
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.jar {
|
tasks.jar {
|
||||||
@@ -10,8 +10,8 @@ tasks.jar {
|
|||||||
"Implementation-Title" to project.name,
|
"Implementation-Title" to project.name,
|
||||||
"Implementation-Version" to project.version,
|
"Implementation-Version" to project.version,
|
||||||
"Implementation-Vendor" to "ELEX co.,pte.",
|
"Implementation-Vendor" to "ELEX co.,pte.",
|
||||||
"Main-Class" to application.mainClass,
|
"Main-Class" to application.mainClass
|
||||||
"Automatic-Module-Name" to "com.elex_project.${project.name}"
|
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,21 +2,36 @@ plugins {
|
|||||||
java
|
java
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "com.elex-project"
|
dependencies {
|
||||||
version = "1.0-SNAPSHOT"
|
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
|
||||||
description = ""//todo
|
implementation("org.slf4j:slf4j-api:2.1.0-alpha1")
|
||||||
|
implementation("org.jetbrains:annotations:24.1.0")
|
||||||
|
|
||||||
|
compileOnly("org.projectlombok:lombok:1.18.32")
|
||||||
|
annotationProcessor("org.projectlombok:lombok:1.18.32")
|
||||||
|
testAnnotationProcessor("org.projectlombok:lombok:1.18.32")
|
||||||
|
|
||||||
|
testImplementation("ch.qos.logback:logback-classic:1.5.3")
|
||||||
|
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
|
||||||
|
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.2")
|
||||||
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
maven {
|
maven {
|
||||||
url = uri("https://repository.elex-project.com/repository/maven")
|
name = "Nexus 3 Repository"
|
||||||
|
url = uri(project.findProperty("repo.url") as String)
|
||||||
|
credentials {
|
||||||
|
username = project.findProperty("repo.username") as String
|
||||||
|
password = project.findProperty("repo.password") as String
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
withSourcesJar()
|
withSourcesJar()
|
||||||
withJavadocJar()
|
withJavadocJar()
|
||||||
sourceCompatibility = org.gradle.api.JavaVersion.VERSION_1_8
|
sourceCompatibility = org.gradle.api.JavaVersion.VERSION_17
|
||||||
targetCompatibility = org.gradle.api.JavaVersion.VERSION_1_8
|
targetCompatibility = org.gradle.api.JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
@@ -51,16 +66,4 @@ tasks.javadoc {
|
|||||||
(options as StandardJavadocDocletOptions).docEncoding = "UTF-8"
|
(options as StandardJavadocDocletOptions).docEncoding = "UTF-8"
|
||||||
|
|
||||||
}
|
}
|
||||||
dependencies {
|
|
||||||
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
|
|
||||||
implementation("org.slf4j:slf4j-api:1.7.30")
|
|
||||||
implementation("org.jetbrains:annotations:21.0.1")
|
|
||||||
|
|
||||||
compileOnly("org.projectlombok:lombok:1.18.20")
|
|
||||||
annotationProcessor("org.projectlombok:lombok:1.18.20")
|
|
||||||
testAnnotationProcessor("org.projectlombok:lombok:1.18.20")
|
|
||||||
|
|
||||||
testImplementation("ch.qos.logback:logback-classic:1.2.3")
|
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter:5.7.0")
|
|
||||||
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0")
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import gradle.kotlin.dsl.accessors._496219b122f87f8abbd64d1094d3f5b6.jar
|
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id ("elex-base")
|
id ("elex-base")
|
||||||
`java-library`
|
`java-library`
|
||||||
@@ -19,6 +17,7 @@ publishing {
|
|||||||
publications {
|
publications {
|
||||||
create<MavenPublication>("mavenJava") {
|
create<MavenPublication>("mavenJava") {
|
||||||
from(components["java"])
|
from(components["java"])
|
||||||
|
artifactId = rootProject.name
|
||||||
pom {
|
pom {
|
||||||
// todo
|
// todo
|
||||||
name.set("${rootProject.name} ${project.name}")
|
name.set("${rootProject.name} ${project.name}")
|
||||||
@@ -37,7 +36,7 @@ publishing {
|
|||||||
license {
|
license {
|
||||||
// todo
|
// todo
|
||||||
name.set("Apache License 2.0")
|
name.set("Apache License 2.0")
|
||||||
url.set("https://github.com/elex-project/${rootProject.name}/blob/main/LICENSE")
|
url.set("https://git.elex-project.com/elex/${rootProject.name}/blob/main/LICENSE")
|
||||||
comments.set("")
|
comments.set("")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -51,7 +50,7 @@ publishing {
|
|||||||
organizationUrl.set("https://www.elex-project.com/")
|
organizationUrl.set("https://www.elex-project.com/")
|
||||||
roles.set(arrayListOf("Developer", "CEO"))
|
roles.set(arrayListOf("Developer", "CEO"))
|
||||||
timezone.set("Asia/Seoul")
|
timezone.set("Asia/Seoul")
|
||||||
properties.set(mapOf("" to ""))
|
//properties.set(mapOf("" to ""))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
contributors {
|
contributors {
|
||||||
@@ -63,9 +62,9 @@ publishing {
|
|||||||
}
|
}
|
||||||
scm {
|
scm {
|
||||||
// todo
|
// todo
|
||||||
connection.set("scm:git:https://github.com/elex-project/${rootProject.name}.git")
|
connection.set("scm:git:https://git.elex-project.com/elex/${rootProject.name}.git")
|
||||||
developerConnection.set("scm:git:https://github.com/elex-project/${rootProject.name}.git")
|
developerConnection.set("scm:git:https://git.elex-project.com/elex/${rootProject.name}.git")
|
||||||
url.set("https://github.com/elex-project/${rootProject.name}/")
|
url.set("https://git.elex-project.com/elex/${rootProject.name}/")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,8 +73,8 @@ publishing {
|
|||||||
repositories {
|
repositories {
|
||||||
maven {
|
maven {
|
||||||
name = "mavenElex"
|
name = "mavenElex"
|
||||||
val urlRelease = uri("https://repository.elex-project.com/repository/maven-releases")
|
val urlRelease = uri(project.findProperty("repo.release.url") as String)
|
||||||
val urlSnapshot = uri("https://repository.elex-project.com/repository/maven-snapshots")
|
val urlSnapshot = uri(project.findProperty("repo.snapshot.url") as String)
|
||||||
url = if (version.toString().endsWith("SNAPSHOT")) urlSnapshot else urlRelease
|
url = if (version.toString().endsWith("SNAPSHOT")) urlSnapshot else urlRelease
|
||||||
// Repository credential, Must be defined in ~/.gradle/gradle.properties
|
// Repository credential, Must be defined in ~/.gradle/gradle.properties
|
||||||
credentials {
|
credentials {
|
||||||
@@ -83,14 +82,7 @@ publishing {
|
|||||||
password = project.findProperty("repo.password") as String
|
password = project.findProperty("repo.password") as String
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
maven { //todo
|
|
||||||
name = "mavenGithub"
|
|
||||||
url = uri("https://maven.pkg.github.com/elex-project/${rootProject.name}")
|
|
||||||
credentials {
|
|
||||||
username = project.findProperty("github.username") as String
|
|
||||||
password = project.findProperty("github.token") as String
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
30
components/build.gradle.kts
Normal file
30
components/build.gradle.kts
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
|
||||||
|
plugins {
|
||||||
|
id("elex-application")
|
||||||
|
idea
|
||||||
|
id("org.openjfx.javafxplugin") version "0.1.0"
|
||||||
|
id("org.beryx.jlink") version "3.0.1"
|
||||||
|
}
|
||||||
|
application {
|
||||||
|
mainClass.set("kr.pe.elex.examples.components.HelloWorldApplication")
|
||||||
|
// mainModule.set("kr.pe.elex.examples.components")
|
||||||
|
}
|
||||||
|
javafx {
|
||||||
|
version = "23-ea+3"
|
||||||
|
modules = listOf("javafx.controls", "javafx.fxml")
|
||||||
|
}
|
||||||
|
jlink {
|
||||||
|
launcher {
|
||||||
|
name = project.name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
idea{
|
||||||
|
module {
|
||||||
|
isDownloadJavadoc=true
|
||||||
|
isDownloadSources=true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024. Elex. All Rights Reesrved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples.components;
|
||||||
|
|
||||||
|
import javafx.application.Application;
|
||||||
|
import javafx.geometry.Insets;
|
||||||
|
import javafx.geometry.Pos;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.control.PasswordField;
|
||||||
|
import javafx.scene.control.TextField;
|
||||||
|
import javafx.scene.layout.BorderPane;
|
||||||
|
import javafx.scene.layout.GridPane;
|
||||||
|
import javafx.scene.layout.HBox;
|
||||||
|
import javafx.scene.layout.Pane;
|
||||||
|
import javafx.scene.text.Font;
|
||||||
|
import javafx.scene.text.FontWeight;
|
||||||
|
import javafx.scene.text.Text;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
|
public class FormApplication extends Application {
|
||||||
|
|
||||||
|
private Pane contentPane() {
|
||||||
|
|
||||||
|
|
||||||
|
final GridPane rootPanel = new GridPane();
|
||||||
|
|
||||||
|
final Text heading = new Text("Log In ");
|
||||||
|
heading.setFont(Font.font("Serif", FontWeight.BOLD, 16));
|
||||||
|
|
||||||
|
final Label lblId = new Label("User Name");
|
||||||
|
final TextField txtId = new TextField();
|
||||||
|
final Label lblPassword = new Label("Password");
|
||||||
|
final PasswordField txtPassword = new PasswordField();
|
||||||
|
final Button btn1 = new Button("Login");
|
||||||
|
final HBox hBox = new HBox();
|
||||||
|
hBox.setAlignment(Pos.CENTER_RIGHT);
|
||||||
|
hBox.setPadding(new Insets(4,4,4,4));
|
||||||
|
hBox.getChildren().add(btn1);
|
||||||
|
|
||||||
|
|
||||||
|
rootPanel.add(heading, 0,0,2,1);
|
||||||
|
rootPanel.add(lblId, 0,1);
|
||||||
|
rootPanel.add(txtId,1,1);
|
||||||
|
rootPanel.add(lblPassword, 0,2);
|
||||||
|
rootPanel.add(txtPassword,1,2);
|
||||||
|
rootPanel.add(hBox, 1,3,2,1);
|
||||||
|
|
||||||
|
rootPanel.setAlignment(Pos.CENTER);
|
||||||
|
rootPanel.setHgap(4);
|
||||||
|
rootPanel.setVgap(4);
|
||||||
|
rootPanel.setPadding(new Insets(16,16,16,16));
|
||||||
|
|
||||||
|
btn1.setOnAction(event -> {
|
||||||
|
System.out.println(txtId.getText());
|
||||||
|
System.out.println(txtPassword.getText());
|
||||||
|
});
|
||||||
|
|
||||||
|
return rootPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start(Stage primaryStage) throws Exception {
|
||||||
|
|
||||||
|
primaryStage.setTitle("Hello, World");
|
||||||
|
primaryStage.setScene(new Scene(contentPane(), 800, 600));
|
||||||
|
primaryStage.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String... args) {
|
||||||
|
launch(args);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024. Elex. All Rights Reesrved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples.components;
|
||||||
|
|
||||||
|
import javafx.application.Application;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.layout.BorderPane;
|
||||||
|
import javafx.scene.layout.Pane;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
|
public class HelloWorldApplication extends Application {
|
||||||
|
|
||||||
|
private Pane contentPane() {
|
||||||
|
final Button btn1 = new Button("Click");
|
||||||
|
btn1.setOnAction(event -> {
|
||||||
|
System.out.println("Click!");
|
||||||
|
});
|
||||||
|
|
||||||
|
final BorderPane rootPanel = new BorderPane();
|
||||||
|
rootPanel.setCenter(btn1);
|
||||||
|
|
||||||
|
return rootPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start(Stage primaryStage) throws Exception {
|
||||||
|
|
||||||
|
primaryStage.setTitle("Hello, World");
|
||||||
|
primaryStage.setScene(new Scene(contentPane(), 800, 600));
|
||||||
|
primaryStage.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String... args) {
|
||||||
|
launch(args);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024. Elex. All Rights Reesrved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples.components;
|
||||||
7
components/src/main/java/module-info.java
Normal file
7
components/src/main/java/module-info.java
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
module javafx.examples.components.main {
|
||||||
|
requires javafx.graphics;
|
||||||
|
requires javafx.controls;
|
||||||
|
requires javafx.fxml;
|
||||||
|
|
||||||
|
exports kr.pe.elex.examples.components;
|
||||||
|
}
|
||||||
10
doc/01_application.md
Normal file
10
doc/01_application.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# Application
|
||||||
|
|
||||||
|
|
||||||
|
1. j메인 클래스에서 javafx.application.Application를 상속하고, start()를 구현한다.
|
||||||
|
2. root 패널을 생성해서 레이아웃을 구현한다.
|
||||||
|
3. start()에서 전달받은 primaryStage에 setScene()을 사용해서 new Scene(root,w,h)을 넘겨준다.
|
||||||
|
4. start()메서드의 맨 뒤에 primaryStage.show()를 호출한다.
|
||||||
|
5. 메인 메서드에서 launch(args)를 호출하면 start()가 호출되고, GUI 창이 실행된다.
|
||||||
|
|
||||||
|
https://docs.oracle.com/javase/8/javase-clienttechnologies.htm
|
||||||
1
doc/02_pane.md
Normal file
1
doc/02_pane.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# 패널
|
||||||
9
doc/03_controls.md
Normal file
9
doc/03_controls.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# 컴포넌트
|
||||||
|
|
||||||
|
## Label
|
||||||
|
|
||||||
|
## Button
|
||||||
|
|
||||||
|
## TextField
|
||||||
|
### PasswordField
|
||||||
|
|
||||||
31
doc/04_3d.md
Normal file
31
doc/04_3d.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# 3D
|
||||||
|
|
||||||
|
## Shape3D < Node
|
||||||
|
|
||||||
|
## MeshView < Shape3D
|
||||||
|
|
||||||
|
## Box < Shape3D
|
||||||
|
|
||||||
|
## Cylinder < Shape3D
|
||||||
|
|
||||||
|
## Sphere < Shape3D
|
||||||
|
|
||||||
|
## Mesh
|
||||||
|
|
||||||
|
## TriangleMesh
|
||||||
|
|
||||||
|
## PerspectiveCamera
|
||||||
|
|
||||||
|
## PointLight
|
||||||
|
|
||||||
|
## AmbientLight
|
||||||
|
|
||||||
|
## PhongMaterial < Material
|
||||||
|
* diffuse color
|
||||||
|
* diffuse map
|
||||||
|
* specular map
|
||||||
|
* specular color
|
||||||
|
* specular power
|
||||||
|
* bump map / normal map
|
||||||
|
* self-illumination map
|
||||||
|
|
||||||
0
doc/05_canvas.md
Normal file
0
doc/05_canvas.md
Normal file
36
fxml/build.gradle.kts
Normal file
36
fxml/build.gradle.kts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* JavaFx Examples
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id("elex-application")
|
||||||
|
idea
|
||||||
|
id("org.openjfx.javafxplugin") version "0.1.0"
|
||||||
|
id("org.beryx.jlink") version "3.0.1"
|
||||||
|
}
|
||||||
|
application {
|
||||||
|
mainClass.set("kr.pe.elex.examples.fxml.FxmlApplication")
|
||||||
|
mainModule.set("kr.pe.elex.examples.fxml")
|
||||||
|
}
|
||||||
|
javafx {
|
||||||
|
version = "23-ea+3"
|
||||||
|
modules = listOf("javafx.controls", "javafx.fxml")
|
||||||
|
}
|
||||||
|
jlink {
|
||||||
|
launcher {
|
||||||
|
name = project.name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
idea{
|
||||||
|
module {
|
||||||
|
isDownloadJavadoc=true
|
||||||
|
isDownloadSources=true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021-2024. Elex. All Rights Reesrved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples.fxml;
|
||||||
|
|
||||||
|
import javafx.application.Application;
|
||||||
|
import javafx.fxml.FXMLLoader;
|
||||||
|
import javafx.scene.Parent;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class FxmlApplication extends Application {
|
||||||
|
public static void main(String... args) {
|
||||||
|
launch(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start(Stage primaryStage) throws Exception {
|
||||||
|
primaryStage.setTitle("Hello!");
|
||||||
|
primaryStage.setWidth(800);
|
||||||
|
primaryStage.setHeight(600);
|
||||||
|
//GridPane root = new GridPane();
|
||||||
|
Parent root = FXMLLoader.load(Objects.requireNonNull(getClass()
|
||||||
|
.getResource("/fxml/root.fxml")));
|
||||||
|
Scene scene = new Scene(root);
|
||||||
|
primaryStage.setScene(scene);
|
||||||
|
primaryStage.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
7
fxml/src/main/java/module-info.java
Normal file
7
fxml/src/main/java/module-info.java
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
module javafx.examples.fxml.main {
|
||||||
|
requires javafx.graphics;
|
||||||
|
requires javafx.controls;
|
||||||
|
requires javafx.fxml;
|
||||||
|
|
||||||
|
exports kr.pe.elex.examples.fxml;
|
||||||
|
}
|
||||||
41
fxml/src/main/resources/fxml/root.fxml
Normal file
41
fxml/src/main/resources/fxml/root.fxml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<?import javafx.scene.control.*?>
|
||||||
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
~ JavaFx Examples
|
||||||
|
~
|
||||||
|
~ Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
~ https://www.elex-project.com/
|
||||||
|
-->
|
||||||
|
|
||||||
|
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.2" xmlns:fx="http://javafx.com/fxml/1">
|
||||||
|
<center>
|
||||||
|
<Button mnemonicParsing="false" text="Button" BorderPane.alignment="CENTER" />
|
||||||
|
</center>
|
||||||
|
<bottom>
|
||||||
|
|
||||||
|
</bottom>
|
||||||
|
<top>
|
||||||
|
<MenuBar BorderPane.alignment="CENTER">
|
||||||
|
<menus>
|
||||||
|
<Menu mnemonicParsing="false" text="File">
|
||||||
|
<items>
|
||||||
|
<MenuItem mnemonicParsing="false" text="Close" />
|
||||||
|
</items>
|
||||||
|
</Menu>
|
||||||
|
<Menu mnemonicParsing="false" text="Edit">
|
||||||
|
<items>
|
||||||
|
<MenuItem mnemonicParsing="false" text="Delete" />
|
||||||
|
</items>
|
||||||
|
</Menu>
|
||||||
|
<Menu mnemonicParsing="false" text="Help">
|
||||||
|
<items>
|
||||||
|
<MenuItem mnemonicParsing="false" text="About" />
|
||||||
|
</items>
|
||||||
|
</Menu>
|
||||||
|
</menus>
|
||||||
|
</MenuBar>
|
||||||
|
</top>
|
||||||
|
</BorderPane>
|
||||||
9
gradle/wrapper/gradle-wrapper.properties
vendored
9
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,12 @@
|
|||||||
|
#
|
||||||
|
# JavaFx Examples
|
||||||
|
#
|
||||||
|
# Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
# https://www.elex-project.com/
|
||||||
|
#
|
||||||
|
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
16
gradlew
vendored
16
gradlew
vendored
@@ -1,21 +1,5 @@
|
|||||||
#!/usr/bin/env sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright 2015 the original author or authors.
|
|
||||||
#
|
|
||||||
# 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
|
|
||||||
#
|
|
||||||
# https://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.
|
|
||||||
#
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
##
|
##
|
||||||
## Gradle start up script for UN*X
|
## Gradle start up script for UN*X
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id("elex-library")
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
package com.elex_project.sample;
|
|
||||||
24
logback.xml
24
logback.xml
@@ -1,28 +1,18 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ JavaFx Examples
|
||||||
|
~
|
||||||
|
~ Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
~ https://www.elex-project.com/
|
||||||
|
-->
|
||||||
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<property name="LOG_FILE" value="LogFile" />
|
|
||||||
<property name="LOG_DIR" value="/var/log/application" />
|
|
||||||
|
|
||||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
<encoder>
|
<encoder>
|
||||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
|
||||||
<file>${LOG_DIR}/${LOG_FILE}.log</file>
|
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
|
||||||
<!-- daily rollover -->
|
|
||||||
<fileNamePattern>${LOG_DIR}/%d{yyyy/MM}/${LOG_FILE}.gz</fileNamePattern>
|
|
||||||
<!-- keep 30 days' worth of history capped at 3GB total size -->
|
|
||||||
<maxHistory>30</maxHistory>
|
|
||||||
<totalSizeCap>3GB</totalSizeCap>
|
|
||||||
</rollingPolicy>
|
|
||||||
<encoder>
|
|
||||||
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<root level="TRACE">
|
<root level="TRACE">
|
||||||
<appender-ref ref="CONSOLE" />
|
<appender-ref ref="CONSOLE" />
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -1,2 +1,11 @@
|
|||||||
rootProject.name = "tmpl-java-multiproject"
|
/*
|
||||||
include("lib", "app")
|
* JavaFx Examples
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021. Elex. All Rights Reserved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
rootProject.name = "javafx-examples"
|
||||||
|
include("fxml")
|
||||||
|
include("components")
|
||||||
|
include("three_d")
|
||||||
|
|||||||
30
three_d/build.gradle.kts
Normal file
30
three_d/build.gradle.kts
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
|
||||||
|
plugins {
|
||||||
|
id("elex-application")
|
||||||
|
idea
|
||||||
|
id("org.openjfx.javafxplugin") version "0.1.0"
|
||||||
|
id("org.beryx.jlink") version "3.0.1"
|
||||||
|
}
|
||||||
|
application {
|
||||||
|
mainClass.set("kr.pe.elex.examples.three_d.MyApplication")
|
||||||
|
// mainModule.set("kr.pe.elex.examples.components")
|
||||||
|
}
|
||||||
|
javafx {
|
||||||
|
version = "23-ea+3"
|
||||||
|
modules = listOf("javafx.controls", "javafx.fxml")
|
||||||
|
}
|
||||||
|
jlink {
|
||||||
|
launcher {
|
||||||
|
name = project.name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
idea{
|
||||||
|
module {
|
||||||
|
isDownloadJavadoc=true
|
||||||
|
isDownloadSources=true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024. Elex. All Rights Reesrved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples.three_d;
|
||||||
|
|
||||||
|
import javafx.scene.Camera;
|
||||||
|
import javafx.scene.PerspectiveCamera;
|
||||||
|
|
||||||
|
public class Cameras {
|
||||||
|
|
||||||
|
public static Camera camera(){
|
||||||
|
final Camera camera = new PerspectiveCamera();
|
||||||
|
|
||||||
|
return camera;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024. Elex. All Rights Reesrved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples.three_d;
|
||||||
|
|
||||||
|
import javafx.scene.AmbientLight;
|
||||||
|
import javafx.scene.PointLight;
|
||||||
|
import javafx.scene.paint.Color;
|
||||||
|
|
||||||
|
public class Lights {
|
||||||
|
public static PointLight pointLight() {
|
||||||
|
final PointLight light = new PointLight();
|
||||||
|
light.setColor(Color.YELLOW);
|
||||||
|
return light;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AmbientLight ambientLight() {
|
||||||
|
final AmbientLight light = new AmbientLight();
|
||||||
|
light.setColor(Color.GOLD);
|
||||||
|
return light;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024. Elex. All Rights Reesrved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples.three_d;
|
||||||
|
|
||||||
|
public class Materials {
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024. Elex. All Rights Reesrved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples.three_d;
|
||||||
|
|
||||||
|
import javafx.application.Application;
|
||||||
|
import javafx.scene.*;
|
||||||
|
import javafx.scene.paint.Color;
|
||||||
|
import javafx.scene.paint.PhongMaterial;
|
||||||
|
import javafx.scene.shape.Box;
|
||||||
|
import javafx.scene.shape.DrawMode;
|
||||||
|
import javafx.scene.transform.Rotate;
|
||||||
|
import javafx.scene.transform.Translate;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
|
public class MyApplication extends Application {
|
||||||
|
private Parent content(){
|
||||||
|
Box box = new Box(5,5,5);
|
||||||
|
box.setMaterial(new PhongMaterial(Color.RED));
|
||||||
|
box.setDrawMode(DrawMode.LINE);
|
||||||
|
|
||||||
|
Camera camera = new PerspectiveCamera(true);
|
||||||
|
camera.getTransforms().addAll(
|
||||||
|
new Rotate(-20, Rotate.Y_AXIS),
|
||||||
|
new Rotate(-20,Rotate.X_AXIS),
|
||||||
|
new Translate(0,0,-15)
|
||||||
|
);
|
||||||
|
|
||||||
|
Group root = new Group();
|
||||||
|
root.getChildren().add(box);
|
||||||
|
root.getChildren().add(camera);
|
||||||
|
|
||||||
|
SubScene subScene = new SubScene(root, 300, 300);
|
||||||
|
subScene.setFill(Color.ALICEBLUE);
|
||||||
|
subScene.setCamera(camera);
|
||||||
|
Group group = new Group();
|
||||||
|
group.getChildren().add(subScene);
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
public static void main(String... args){
|
||||||
|
launch(args);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void start(Stage primaryStage) throws Exception {
|
||||||
|
primaryStage.setTitle("3D Example");
|
||||||
|
primaryStage.setResizable(false);
|
||||||
|
primaryStage.setScene(new Scene(content()));
|
||||||
|
primaryStage.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024. Elex. All Rights Reesrved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples.three_d;
|
||||||
|
|
||||||
|
import javafx.scene.paint.Color;
|
||||||
|
import javafx.scene.paint.PhongMaterial;
|
||||||
|
import javafx.scene.shape.Box;
|
||||||
|
import javafx.scene.shape.Cylinder;
|
||||||
|
import javafx.scene.shape.Sphere;
|
||||||
|
import javafx.scene.shape.TriangleMesh;
|
||||||
|
|
||||||
|
public class Shapes {
|
||||||
|
public static Box box(){
|
||||||
|
final Box shape = new Box(100, 100, 30);
|
||||||
|
final PhongMaterial material = new PhongMaterial();
|
||||||
|
material.setSpecularColor(Color.ORANGE);
|
||||||
|
material.setDiffuseColor(Color.RED);
|
||||||
|
shape.setMaterial(material);
|
||||||
|
return shape;
|
||||||
|
}
|
||||||
|
public static Cylinder cylinder(){
|
||||||
|
final Cylinder shape = new Cylinder(100, 100);
|
||||||
|
final PhongMaterial material = new PhongMaterial();
|
||||||
|
material.setSpecularColor(Color.BLUE);
|
||||||
|
material.setDiffuseColor(Color.LIGHTBLUE);
|
||||||
|
shape.setMaterial(material);
|
||||||
|
return shape;
|
||||||
|
}
|
||||||
|
public static Sphere sphere(){
|
||||||
|
final Sphere shape = new Sphere(100);
|
||||||
|
final PhongMaterial material = new PhongMaterial();
|
||||||
|
material.setSpecularColor(Color.BLUE);
|
||||||
|
material.setDiffuseColor(Color.LIGHTBLUE);
|
||||||
|
shape.setMaterial(material);
|
||||||
|
return shape;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TriangleMesh triangleMesh(){
|
||||||
|
final TriangleMesh shape = new TriangleMesh();
|
||||||
|
final float[] points = {};
|
||||||
|
shape.getPoints().addAll(points);
|
||||||
|
final float[] texCoords = {};
|
||||||
|
shape.getTexCoords().addAll(texCoords);
|
||||||
|
final int[] faces = {};
|
||||||
|
shape.getFaces().addAll(faces);
|
||||||
|
final int[] smoothingGroups = {};
|
||||||
|
shape.getFaceSmoothingGroups().addAll(smoothingGroups);
|
||||||
|
|
||||||
|
return shape;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024. Elex. All Rights Reesrved.
|
||||||
|
* https://www.elex-project.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
package kr.pe.elex.examples.three_d;
|
||||||
7
three_d/src/main/java/module-info.java
Normal file
7
three_d/src/main/java/module-info.java
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
module javafx.examples.fxml.main {
|
||||||
|
requires javafx.graphics;
|
||||||
|
requires javafx.controls;
|
||||||
|
requires javafx.fxml;
|
||||||
|
|
||||||
|
exports kr.pe.elex.examples.three_d;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user