Refactor into basic folder structure

This commit is contained in:
Paul Schaub 2018-08-20 21:49:17 +02:00
parent db64ab29d6
commit df7b6a3cf2
Signed by: vanitasvitae
GPG key ID: 62BEE9264BF17311
11 changed files with 45 additions and 217 deletions

View file

@ -1,12 +1,13 @@
package de.vanitasvitae.fasel.sample;
package de.vanitasvitae.fasel;
import de.vanitasvitae.fasel.ui.container.LoginController;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
public class FaselApplication extends Application {
private Stage primaryStage;
@ -14,7 +15,7 @@ public class Main extends Application {
public void start(Stage primaryStage) throws Exception{
this.primaryStage = primaryStage;
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/fxml/layout/login.fxml"));
loader.setLocation(getClass().getResource("/fxml/container/login_container.fxml"));
Parent root = loader.load();
LoginController controller = loader.getController();
controller.setApplication(this);

View file

@ -1,4 +0,0 @@
package de.vanitasvitae.fasel.sample;
public class Controller {
}

View file

@ -1,180 +0,0 @@
package de.vanitasvitae.fasel.sample;
import javafx.application.*;
import javafx.geometry.Pos;
import javafx.scene.*;
import javafx.scene.control.Label;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.*;
import javax.imageio.ImageIO;
import java.io.IOException;
import java.net.URL;
import java.text.*;
import java.util.*;
// Java 8 code
public class JavaFXTrayIconSample extends Application {
// one icon location is shared between the application tray icon and task bar icon.
// you could also use multiple icons to allow for clean display of tray icons on hi-dpi devices.
private static final String iconImageLoc =
"http://icons.iconarchive.com/icons/scafer31000/bubble-circle-3/16/GameCenter-icon.png";
// application stage is stored so that it can be shown and hidden based on system tray icon operations.
private Stage stage;
// a timer allowing the tray icon to provide a periodic notification event.
private Timer notificationTimer = new Timer();
// format used to display the current time in a tray icon notification.
private DateFormat timeFormat = SimpleDateFormat.getTimeInstance();
// sets up the javafx application.
// a tray icon is setup for the icon, but the main stage remains invisible until the user
// interacts with the tray icon.
@Override public void start(final Stage stage) {
// stores a reference to the stage.
this.stage = stage;
// instructs the javafx system not to exit implicitly when the last application window is shut.
Platform.setImplicitExit(false);
// sets up the tray icon (using awt code run on the swing thread).
javax.swing.SwingUtilities.invokeLater(this::addAppToTray);
// out stage will be translucent, so give it a transparent style.
stage.initStyle(StageStyle.TRANSPARENT);
// create the layout for the javafx stage.
StackPane layout = new StackPane(createContent());
layout.setStyle(
"-fx-background-color: rgba(255, 255, 255, 0.5);"
);
layout.setPrefSize(300, 200);
// this dummy app just hides itself when the app screen is clicked.
// a real app might have some interactive UI and a separate icon which hides the app window.
layout.setOnMouseClicked(event -> stage.hide());
// a scene with a transparent fill is necessary to implement the translucent app window.
Scene scene = new Scene(layout);
scene.setFill(Color.TRANSPARENT);
stage.setScene(scene);
}
/**
* For this dummy app, the (JavaFX scenegraph) content, just says "hello, world".
* A real app, might load an FXML or something like that.
*
* @return the main window application content.
*/
private Node createContent() {
Label hello = new Label("hello, world");
hello.setStyle("-fx-font-size: 40px; -fx-text-fill: forestgreen;");
Label instructions = new Label("(click to hide)");
instructions.setStyle("-fx-font-size: 12px; -fx-text-fill: orange;");
VBox content = new VBox(10, hello, instructions);
content.setAlignment(Pos.CENTER);
return content;
}
/**
* Sets up a system tray icon for the application.
*/
private void addAppToTray() {
try {
// ensure awt toolkit is initialized.
java.awt.Toolkit.getDefaultToolkit();
// app requires system tray support, just exit if there is no support.
if (!java.awt.SystemTray.isSupported()) {
System.out.println("No system tray support, application exiting.");
Platform.exit();
}
// set up a system tray icon.
java.awt.SystemTray tray = java.awt.SystemTray.getSystemTray();
URL imageLoc = new URL(
iconImageLoc
);
java.awt.Image image = ImageIO.read(imageLoc);
java.awt.TrayIcon trayIcon = new java.awt.TrayIcon(image);
// if the user double-clicks on the tray icon, show the main app stage.
trayIcon.addActionListener(event -> Platform.runLater(this::showStage));
// if the user selects the default menu item (which includes the app name),
// show the main app stage.
java.awt.MenuItem openItem = new java.awt.MenuItem("hello, world");
openItem.addActionListener(event -> Platform.runLater(this::showStage));
// the convention for tray icons seems to be to set the default icon for opening
// the application stage in a bold font.
java.awt.Font defaultFont = java.awt.Font.decode(null);
java.awt.Font boldFont = defaultFont.deriveFont(java.awt.Font.BOLD);
openItem.setFont(boldFont);
// to really exit the application, the user must go to the system tray icon
// and select the exit option, this will shutdown JavaFX and remove the
// tray icon (removing the tray icon will also shut down AWT).
java.awt.MenuItem exitItem = new java.awt.MenuItem("Exit");
exitItem.addActionListener(event -> {
notificationTimer.cancel();
Platform.exit();
tray.remove(trayIcon);
});
// setup the popup menu for the application.
final java.awt.PopupMenu popup = new java.awt.PopupMenu();
popup.add(openItem);
popup.addSeparator();
popup.add(exitItem);
trayIcon.setPopupMenu(popup);
// create a timer which periodically displays a notification message.
notificationTimer.schedule(
new TimerTask() {
@Override
public void run() {
javax.swing.SwingUtilities.invokeLater(() ->
trayIcon.displayMessage(
"hello",
"The time is now " + timeFormat.format(new Date()),
java.awt.TrayIcon.MessageType.INFO
)
);
}
},
5_000,
60_000
);
// add the application tray icon to the system tray.
tray.add(trayIcon);
} catch (java.awt.AWTException | IOException e) {
System.out.println("Unable to init system tray");
e.printStackTrace();
}
}
/**
* Shows the application stage and ensures that it is brought ot the front of all stages.
*/
private void showStage() {
if (stage != null) {
stage.show();
stage.toFront();
}
}
public static void main(String[] args) throws IOException, java.awt.AWTException {
// Just launches the JavaFX application.
// Due to way the application is coded, the application will remain running
// until the user selects the Exit menu option from the tray icon.
launch(args);
}
}

View file

@ -1,18 +0,0 @@
package de.vanitasvitae.fasel.sample;
import javafx.fxml.FXML;
public class LoginController extends Controller {
@FXML
private LoginFragmentController loginFragmentController;
@FXML
private void initialize() {
}
public void setApplication(Main main) {
loginFragmentController.setApplication(main);
}
}

View file

@ -0,0 +1,20 @@
package de.vanitasvitae.fasel.ui.container;
import de.vanitasvitae.fasel.FaselApplication;
import de.vanitasvitae.fasel.ui.fragment.LoginFragmentController;
import javafx.fxml.FXML;
public class LoginController {
@FXML
private LoginFragmentController loginFragmentController;
@FXML
private void initialize() {
}
public void setApplication(FaselApplication main) {
loginFragmentController.setApplication(main);
}
}

View file

@ -1,10 +1,11 @@
package de.vanitasvitae.fasel.sample;
package de.vanitasvitae.fasel.ui.fragment;
import java.io.IOException;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXPasswordField;
import com.jfoenix.controls.JFXTextField;
import de.vanitasvitae.fasel.FaselApplication;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
@ -23,7 +24,7 @@ public class LoginFragmentController {
@FXML
private JFXButton button_login;
private Main main;
private FaselApplication main;
@FXML
private void initialize() {
@ -44,7 +45,7 @@ public class LoginFragmentController {
private void switchToMainScene() throws IOException {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/fxml/sample.fxml"));
loader.setLocation(getClass().getResource("/fxml/container/main_container.fxml"));
Parent root = loader.load();
Scene scene = new Scene(root, 1200, 741);
@ -53,7 +54,7 @@ public class LoginFragmentController {
// primaryStage.show();
}
public void setApplication(Main main) {
public void setApplication(FaselApplication main) {
this.main = main;
}
}

View file

@ -3,7 +3,12 @@
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<VBox alignment="CENTER" style="-fx-background-color: lightgrey;" xmlns="http://javafx.com/javafx/8.0.162-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.vanitasvitae.fasel.sample.LoginController">
<VBox alignment="CENTER"
style="-fx-background-color: lightgrey;"
xmlns="http://javafx.com/javafx/8.0.162-ea"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="de.vanitasvitae.fasel.ui.container.LoginController">
<HBox alignment="CENTER" style="-fx-background-color: transparent;">
<fx:include fx:id="loginFragment" source="../fragment/login.fxml" />
</HBox>

View file

@ -5,13 +5,18 @@
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<SplitPane dividerPositions="0.2993311036789298" prefHeight="314.0" prefWidth="657.0" BorderPane.alignment="CENTER" xmlns="http://javafx.com/javafx/8.0.162-ea" xmlns:fx="http://javafx.com/fxml/1">
<SplitPane dividerPositions="0.2993311036789298"
prefHeight="314.0"
prefWidth="657.0"
BorderPane.alignment="CENTER"
xmlns="http://javafx.com/javafx/8.0.162-ea"
xmlns:fx="http://javafx.com/fxml/1">
<items>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
<children>
<BorderPane prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<top>
<fx:include source="main_headerbar.fxml" />
<fx:include source="../elements/main_headerbar.fxml" />
</top>
<center>
<JFXListView prefHeight="355.0" prefWidth="177.0" />
@ -28,7 +33,7 @@
<JFXListView prefHeight="355.0" prefWidth="177.0" />
</center>
<bottom>
<fx:include source="layout/chat_input_toolbar.fxml" />
<fx:include source="../elements/chat_input_toolbar.fxml" />
</bottom>
</BorderPane>
</children>

View file

@ -5,8 +5,6 @@
<?import javafx.scene.layout.BorderPane?>
<?import javafx.geometry.Insets?>
<BorderPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="de.vanitasvitae.fasel.sample.Controller"
prefHeight="45.0" prefWidth="200.0">
<left>
<ToggleButton mnemonicParsing="false" stylesheets="@../../css/share_button.css" />

View file

@ -6,7 +6,7 @@
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>
<AnchorPane prefHeight="45.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.162-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.vanitasvitae.fasel.sample.Controller">
<AnchorPane prefHeight="45.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.162-ea" xmlns:fx="http://javafx.com/fxml/1">
<children>
<BorderPane prefHeight="45.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<left>

View file

@ -6,7 +6,7 @@
<?import com.jfoenix.controls.JFXTextField?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.VBox?>
<VBox prefWidth="300.0" prefHeight="150.0" minWidth="300.0" minHeight="150.0" maxWidth="300.0" maxHeight="150.0" fx:controller="de.vanitasvitae.fasel.sample.LoginFragmentController"
<VBox prefWidth="300.0" prefHeight="150.0" minWidth="300.0" minHeight="150.0" maxWidth="300.0" maxHeight="150.0" fx:controller="de.vanitasvitae.fasel.ui.fragment.LoginFragmentController"
alignment="CENTER" spacing="8.0" styleClass="card" stylesheets="@../../css/material/cards.css" xmlns="http://javafx.com/javafx/8.0.162-ea" xmlns:fx="http://javafx.com/fxml/1">
<children>
<JFXTextField fx:id="text_username" promptText="Username" />