Refactor into basic folder structure
This commit is contained in:
parent
db64ab29d6
commit
df7b6a3cf2
11 changed files with 45 additions and 217 deletions
|
@ -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.application.Application;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
import javafx.scene.Parent;
|
import javafx.scene.Parent;
|
||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
public class Main extends Application {
|
public class FaselApplication extends Application {
|
||||||
|
|
||||||
private Stage primaryStage;
|
private Stage primaryStage;
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ public class Main extends Application {
|
||||||
public void start(Stage primaryStage) throws Exception{
|
public void start(Stage primaryStage) throws Exception{
|
||||||
this.primaryStage = primaryStage;
|
this.primaryStage = primaryStage;
|
||||||
FXMLLoader loader = new FXMLLoader();
|
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();
|
Parent root = loader.load();
|
||||||
LoginController controller = loader.getController();
|
LoginController controller = loader.getController();
|
||||||
controller.setApplication(this);
|
controller.setApplication(this);
|
|
@ -1,4 +0,0 @@
|
||||||
package de.vanitasvitae.fasel.sample;
|
|
||||||
|
|
||||||
public class Controller {
|
|
||||||
}
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,10 +1,11 @@
|
||||||
package de.vanitasvitae.fasel.sample;
|
package de.vanitasvitae.fasel.ui.fragment;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import com.jfoenix.controls.JFXButton;
|
import com.jfoenix.controls.JFXButton;
|
||||||
import com.jfoenix.controls.JFXPasswordField;
|
import com.jfoenix.controls.JFXPasswordField;
|
||||||
import com.jfoenix.controls.JFXTextField;
|
import com.jfoenix.controls.JFXTextField;
|
||||||
|
import de.vanitasvitae.fasel.FaselApplication;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
|
@ -23,7 +24,7 @@ public class LoginFragmentController {
|
||||||
@FXML
|
@FXML
|
||||||
private JFXButton button_login;
|
private JFXButton button_login;
|
||||||
|
|
||||||
private Main main;
|
private FaselApplication main;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
|
@ -44,7 +45,7 @@ public class LoginFragmentController {
|
||||||
|
|
||||||
private void switchToMainScene() throws IOException {
|
private void switchToMainScene() throws IOException {
|
||||||
FXMLLoader loader = new FXMLLoader();
|
FXMLLoader loader = new FXMLLoader();
|
||||||
loader.setLocation(getClass().getResource("/fxml/sample.fxml"));
|
loader.setLocation(getClass().getResource("/fxml/container/main_container.fxml"));
|
||||||
Parent root = loader.load();
|
Parent root = loader.load();
|
||||||
|
|
||||||
Scene scene = new Scene(root, 1200, 741);
|
Scene scene = new Scene(root, 1200, 741);
|
||||||
|
@ -53,7 +54,7 @@ public class LoginFragmentController {
|
||||||
// primaryStage.show();
|
// primaryStage.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setApplication(Main main) {
|
public void setApplication(FaselApplication main) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -3,7 +3,12 @@
|
||||||
<?import javafx.scene.layout.HBox?>
|
<?import javafx.scene.layout.HBox?>
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?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;">
|
<HBox alignment="CENTER" style="-fx-background-color: transparent;">
|
||||||
<fx:include fx:id="loginFragment" source="../fragment/login.fxml" />
|
<fx:include fx:id="loginFragment" source="../fragment/login.fxml" />
|
||||||
</HBox>
|
</HBox>
|
|
@ -5,13 +5,18 @@
|
||||||
<?import javafx.scene.layout.AnchorPane?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
<?import javafx.scene.layout.BorderPane?>
|
<?import javafx.scene.layout.BorderPane?>
|
||||||
<?import javafx.scene.layout.HBox?>
|
<?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>
|
<items>
|
||||||
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
|
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0">
|
||||||
<children>
|
<children>
|
||||||
<BorderPane prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<BorderPane prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<top>
|
<top>
|
||||||
<fx:include source="main_headerbar.fxml" />
|
<fx:include source="../elements/main_headerbar.fxml" />
|
||||||
</top>
|
</top>
|
||||||
<center>
|
<center>
|
||||||
<JFXListView prefHeight="355.0" prefWidth="177.0" />
|
<JFXListView prefHeight="355.0" prefWidth="177.0" />
|
||||||
|
@ -28,7 +33,7 @@
|
||||||
<JFXListView prefHeight="355.0" prefWidth="177.0" />
|
<JFXListView prefHeight="355.0" prefWidth="177.0" />
|
||||||
</center>
|
</center>
|
||||||
<bottom>
|
<bottom>
|
||||||
<fx:include source="layout/chat_input_toolbar.fxml" />
|
<fx:include source="../elements/chat_input_toolbar.fxml" />
|
||||||
</bottom>
|
</bottom>
|
||||||
</BorderPane>
|
</BorderPane>
|
||||||
</children>
|
</children>
|
|
@ -5,8 +5,6 @@
|
||||||
<?import javafx.scene.layout.BorderPane?>
|
<?import javafx.scene.layout.BorderPane?>
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<BorderPane xmlns="http://javafx.com/javafx"
|
<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">
|
prefHeight="45.0" prefWidth="200.0">
|
||||||
<left>
|
<left>
|
||||||
<ToggleButton mnemonicParsing="false" stylesheets="@../../css/share_button.css" />
|
<ToggleButton mnemonicParsing="false" stylesheets="@../../css/share_button.css" />
|
|
@ -6,7 +6,7 @@
|
||||||
<?import javafx.scene.layout.AnchorPane?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
<?import javafx.scene.layout.BorderPane?>
|
<?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>
|
<children>
|
||||||
<BorderPane prefHeight="45.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<BorderPane prefHeight="45.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<left>
|
<left>
|
|
@ -6,7 +6,7 @@
|
||||||
<?import com.jfoenix.controls.JFXTextField?>
|
<?import com.jfoenix.controls.JFXTextField?>
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?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">
|
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>
|
<children>
|
||||||
<JFXTextField fx:id="text_username" promptText="Username" />
|
<JFXTextField fx:id="text_username" promptText="Username" />
|
||||||
|
|
Loading…
Reference in a new issue