From 4e681e0637587a8fd4a892b80a05a093e109c2e8 Mon Sep 17 00:00:00 2001 From: Arnaud Vergnet Date: Fri, 27 Nov 2020 11:59:55 +0100 Subject: [PATCH] feat: first ui draft This uses JFoenix for a material design feel --- build.gradle | 13 ++++- .../fr/insa/clavardator/ChatController.java | 45 +++++++++++++++ .../fr/insa/clavardator/DrawerController.java | 23 ++++++++ .../fr/insa/clavardator/FXMLController.java | 21 ------- .../java/fr/insa/clavardator/MainApp.java | 16 ++++-- .../fr/insa/clavardator/MainController.java | 47 ++++++++++++++++ .../resources/fr/insa/clavardator/drawer.fxml | 22 ++++++++ .../resources/fr/insa/clavardator/scene.fxml | 55 ++++++++++++++----- 8 files changed, 200 insertions(+), 42 deletions(-) create mode 100644 src/main/java/fr/insa/clavardator/ChatController.java create mode 100644 src/main/java/fr/insa/clavardator/DrawerController.java delete mode 100644 src/main/java/fr/insa/clavardator/FXMLController.java create mode 100644 src/main/java/fr/insa/clavardator/MainController.java create mode 100644 src/main/resources/fr/insa/clavardator/drawer.fxml diff --git a/build.gradle b/build.gradle index 2f27e10..ef88d2f 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ repositories { javafx { version = "11.0.2" - modules = [ 'javafx.controls', 'javafx.fxml' ] + modules = ['javafx.controls', 'javafx.fxml'] } dependencies { @@ -22,6 +22,7 @@ dependencies { implementation 'org.xerial:sqlite-jdbc:3.32.3' testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0") + compile 'com.jfoenix:jfoenix:9.0.10' } @@ -38,4 +39,14 @@ jar { } } +run { + jvmArgs = [ + "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED", + "--add-exports=javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED", + "--add-exports=javafx.base/com.sun.javafx.binding=ALL-UNNAMED", + "--add-exports=javafx.graphics/com.sun.javafx.stage=ALL-UNNAMED", + "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=ALL-UNNAMED" + ] +} + mainClassName = 'fr.insa.clavardator.MainApp' \ No newline at end of file diff --git a/src/main/java/fr/insa/clavardator/ChatController.java b/src/main/java/fr/insa/clavardator/ChatController.java new file mode 100644 index 0000000..a414971 --- /dev/null +++ b/src/main/java/fr/insa/clavardator/ChatController.java @@ -0,0 +1,45 @@ +package fr.insa.clavardator; + +import com.jfoenix.controls.JFXHamburger; +import com.jfoenix.transitions.hamburger.HamburgerBackArrowBasicTransition; +import com.jfoenix.transitions.hamburger.HamburgerSlideCloseTransition; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.ListView; + +import java.net.URL; +import java.util.ResourceBundle; + +public class ChatController implements Initializable { + + @FXML + private ListView messageList; + @FXML + private JFXHamburger hamburger; + + private HamburgerBackArrowBasicTransition burgerTask; + + @Override + public void initialize(URL url, ResourceBundle rb) { + + ObservableList messages = FXCollections.observableArrayList( + "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test"); + + messageList.setItems(messages); + messageList.scrollTo(messageList.getItems().size() - 1); + burgerTask = new HamburgerBackArrowBasicTransition(hamburger); + burgerTask.setRate(-1); + } + + public void onHamburgerClick() { + burgerTask.setRate(burgerTask.getRate() * -1); + burgerTask.play(); + } + + public JFXHamburger getHamburger() { + return hamburger; + } + +} \ No newline at end of file diff --git a/src/main/java/fr/insa/clavardator/DrawerController.java b/src/main/java/fr/insa/clavardator/DrawerController.java new file mode 100644 index 0000000..2be4477 --- /dev/null +++ b/src/main/java/fr/insa/clavardator/DrawerController.java @@ -0,0 +1,23 @@ +package fr.insa.clavardator; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.ListView; + +import java.net.URL; +import java.util.ResourceBundle; + +public class DrawerController implements Initializable { + + @FXML + private ListView userList; + + @Override + public void initialize(URL url, ResourceBundle rb) { + ObservableList activeList = FXCollections.observableArrayList( + "Julia", "Ian", "Sue", "Matthew", "Hannah", "Stephan", "Denise", "Julia", "Ian", "Sue", "Matthew", "Hannah", "Stephan", "Denise", "Julia", "Ian", "Sue", "Matthew", "Hannah", "Stephan", "Denise", "Julia", "Ian", "Sue", "Matthew", "Hannah", "Stephan", "Denise"); + userList.setItems(activeList); + } +} \ No newline at end of file diff --git a/src/main/java/fr/insa/clavardator/FXMLController.java b/src/main/java/fr/insa/clavardator/FXMLController.java deleted file mode 100644 index f434146..0000000 --- a/src/main/java/fr/insa/clavardator/FXMLController.java +++ /dev/null @@ -1,21 +0,0 @@ -package fr.insa.clavardator; - -import javafx.fxml.FXML; -import javafx.fxml.Initializable; -import javafx.scene.control.Label; - -import java.net.URL; -import java.util.ResourceBundle; - -public class FXMLController implements Initializable { - - @FXML - private Label label; - - @Override - public void initialize(URL url, ResourceBundle rb) { - String javaVersion = System.getProperty("java.version"); - String javafxVersion = System.getProperty("javafx.version"); - label.setText("-= CLAVARDATOR =-\nusing JavaFX " + javafxVersion + "\nRunning on Java " + javaVersion + "."); - } -} \ No newline at end of file diff --git a/src/main/java/fr/insa/clavardator/MainApp.java b/src/main/java/fr/insa/clavardator/MainApp.java index e43d000..d09139f 100644 --- a/src/main/java/fr/insa/clavardator/MainApp.java +++ b/src/main/java/fr/insa/clavardator/MainApp.java @@ -1,11 +1,11 @@ package fr.insa.clavardator; import javafx.application.Application; -import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; +// See here : https://github.com/jfoenixadmin/JFoenix/blob/master/demo/src/main/java/demos/components/DrawerDemo.java public class MainApp extends Application { @@ -15,13 +15,19 @@ public class MainApp extends Application { @Override public void start(Stage stage) throws Exception { - Parent root = FXMLLoader.load(getClass().getResource("scene.fxml")); +// String javaVersion = System.getProperty("java.version"); +// String javafxVersion = System.getProperty("javafx.version"); - Scene scene = new Scene(root); - scene.getStylesheets().add(getClass().getResource("styles.css").toExternalForm()); + final MainController main = new MainController(); + final Parent content = main.init(); + + Scene scene = new Scene(content); - stage.setTitle("Clavardator"); stage.setScene(scene); + stage.setTitle("Clavardator"); + stage.setMinHeight(640); + stage.setMinWidth(640); + stage.setMaximized(true); stage.show(); } diff --git a/src/main/java/fr/insa/clavardator/MainController.java b/src/main/java/fr/insa/clavardator/MainController.java new file mode 100644 index 0000000..db6551b --- /dev/null +++ b/src/main/java/fr/insa/clavardator/MainController.java @@ -0,0 +1,47 @@ +package fr.insa.clavardator; + +import com.jfoenix.controls.JFXButton; +import com.jfoenix.controls.JFXDrawer; +import com.jfoenix.controls.JFXDrawersStack; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.layout.FlowPane; + +import java.io.IOException; + +import static javafx.scene.input.MouseEvent.MOUSE_CLICKED; +import static javafx.scene.input.MouseEvent.MOUSE_PRESSED; + +public class MainController { + + private final JFXDrawer leftDrawer ; + private final JFXDrawersStack drawersStack; + + public MainController() { + leftDrawer = new JFXDrawer(); + drawersStack = new JFXDrawersStack(); + } + + public Parent init() throws IOException { + FXMLLoader chatLoader = new FXMLLoader(getClass().getResource("scene.fxml")); + Parent chatContent = chatLoader.load(); + ChatController chatController = chatLoader.getController(); + + FXMLLoader drawerLoader = new FXMLLoader(getClass().getResource("drawer.fxml")); + Parent drawerContent = drawerLoader.load(); + + leftDrawer.setSidePane(drawerContent); + leftDrawer.setDefaultDrawerSize(300); + leftDrawer.setResizeContent(true); + leftDrawer.setOverLayVisible(false); + leftDrawer.setResizableOnDrag(false); + leftDrawer.setOverLayVisible(false); + + drawersStack.setContent(chatContent); + + chatController.getHamburger().addEventHandler(MOUSE_CLICKED, e -> drawersStack.toggle(leftDrawer)); + + return drawersStack; + } +} diff --git a/src/main/resources/fr/insa/clavardator/drawer.fxml b/src/main/resources/fr/insa/clavardator/drawer.fxml new file mode 100644 index 0000000..0ff3b1c --- /dev/null +++ b/src/main/resources/fr/insa/clavardator/drawer.fxml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/fr/insa/clavardator/scene.fxml b/src/main/resources/fr/insa/clavardator/scene.fxml index 22d5cea..deae631 100644 --- a/src/main/resources/fr/insa/clavardator/scene.fxml +++ b/src/main/resources/fr/insa/clavardator/scene.fxml @@ -1,17 +1,42 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +