After Width: | Height: | Size: 209 KiB |
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/untitled/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="18" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/TPCapteur.iml" filepath="$PROJECT_DIR$/TPCapteur.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Palette2">
|
||||
<group name="Swing">
|
||||
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||
</item>
|
||||
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||
<initial-values>
|
||||
<property name="text" value="Button" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="RadioButton" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="CheckBox" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="Label" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||
<preferred-size width="-1" height="20" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||
</item>
|
||||
</group>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/res" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module-library">
|
||||
<library>
|
||||
<CLASSES>
|
||||
<root url="file://$PATH_TO_JAVAFX$" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<NATIVE>
|
||||
<root url="file://$PATH_TO_JAVAFX$" />
|
||||
</NATIVE>
|
||||
<SOURCES />
|
||||
<jarDirectory url="file://$PATH_TO_JAVAFX$" recursive="false" />
|
||||
</library>
|
||||
</orderEntry>
|
||||
</component>
|
||||
</module>
|
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import java.lang.*?>
|
||||
<?import java.util.*?>
|
||||
<?import javafx.scene.*?>
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
|
||||
<?import javafx.scene.text.Text?>
|
||||
<BorderPane xmlns:fx="http://javafx.com/fxml" style="-fx-background-color: skyblue;" minWidth="500" fx:controller="view.CaptorWindow">
|
||||
|
||||
<left>
|
||||
<BorderPane style="-fx-background-color: white;">
|
||||
<top>
|
||||
<TreeView fx:id="lvCaptors" maxWidth="200"/>
|
||||
</top>
|
||||
<bottom>
|
||||
<Button style="-fx-background-color: transparent; -fx-font-weight: bold;" mnemonicParsing="false" onAction="#buttonExit" text="Fermer" BorderPane.alignment="CENTER" />
|
||||
</bottom>
|
||||
</BorderPane>
|
||||
</left>
|
||||
|
||||
<center>
|
||||
<BorderPane fx:id="master">
|
||||
<top>
|
||||
<VBox>
|
||||
<HBox>
|
||||
<Text text="UUID :" style="-fx-fill: white; -fx-font-weight: bold;"/>
|
||||
<Label fx:id="id" maxWidth="250"/>
|
||||
</HBox>
|
||||
<HBox>
|
||||
<Text text="NOM :" style="-fx-fill: white; -fx-font-weight: bold;" />
|
||||
<TextField fx:id="nom" maxWidth="250"/>
|
||||
</HBox>
|
||||
</VBox>
|
||||
</top>
|
||||
<bottom>
|
||||
<HBox>
|
||||
<Button mnemonicParsing="false" text="Image" onAction="#openWindowImage"/>
|
||||
<Button mnemonicParsing="false" text="Thermostat" onAction="#openWindowThermosta"/>
|
||||
</HBox>
|
||||
</bottom>
|
||||
</BorderPane>
|
||||
</center>
|
||||
|
||||
</BorderPane>
|
||||
|
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.image.ImageView?>
|
||||
<?import javafx.scene.layout.BorderPane?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<BorderPane prefHeight="250.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/18"
|
||||
xmlns:fx="http://javafx.com/fxml/1">
|
||||
<top>
|
||||
<Label fx:id="nom" style="-fx-font-weight: bold; -fx-font-size: 22;" BorderPane.alignment="CENTER"/>
|
||||
</top>
|
||||
<center>
|
||||
<StackPane>
|
||||
<ImageView fx:id="image" fitHeight="350.0" fitWidth="500.0" pickOnBounds="true" preserveRatio="true" BorderPane.alignment="CENTER"/>
|
||||
<Label fx:id="labelTemp" style="-fx-font-weight: bold;" BorderPane.alignment="CENTER"/>
|
||||
</StackPane>
|
||||
</center>
|
||||
<bottom>
|
||||
<Button style="-fx-background-color: transparent; -fx-font-weight: bold;" mnemonicParsing="false" onAction="#buttonExit" text="Fermer" BorderPane.alignment="CENTER">
|
||||
<BorderPane.margin>
|
||||
<Insets bottom="30.0" top="50.0"/>
|
||||
</BorderPane.margin>
|
||||
</Button>
|
||||
</bottom>
|
||||
</BorderPane>
|
@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.Slider?>
|
||||
<?import javafx.scene.layout.BorderPane?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.text.Text?>
|
||||
|
||||
<BorderPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/18"
|
||||
xmlns:fx="http://javafx.com/fxml/1">
|
||||
<center>
|
||||
<Slider orientation="VERTICAL" BorderPane.alignment="CENTER" fx:id="slider" onMouseClicked="#onChange"
|
||||
onMouseDragged="#onChange" showTickLabels="true" showTickMarks="true" min="-30" max="70" value="0">
|
||||
<BorderPane.margin>
|
||||
<Insets/>
|
||||
</BorderPane.margin>
|
||||
</Slider>
|
||||
</center>
|
||||
<bottom>
|
||||
<Button style="-fx-background-color: transparent; -fx-font-weight: bold;" mnemonicParsing="false" onAction="#buttonExit" text="Fermer" BorderPane.alignment="CENTER">
|
||||
<BorderPane.margin>
|
||||
<Insets bottom="30.0" top="50.0"/>
|
||||
</BorderPane.margin>
|
||||
</Button>
|
||||
</bottom>
|
||||
<top>
|
||||
<VBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
|
||||
prefHeight="50.0" prefWidth="100.0" BorderPane.alignment="CENTER">
|
||||
<children>
|
||||
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Thermostat"/>
|
||||
<HBox prefHeight="100.0" prefWidth="200.0">
|
||||
<children>
|
||||
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Température :">
|
||||
<HBox.margin>
|
||||
<Insets right="5.0"/>
|
||||
</HBox.margin>
|
||||
</Text>
|
||||
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="XXX" fx:id="valTemperature"/>
|
||||
</children>
|
||||
</HBox>
|
||||
</children>
|
||||
<BorderPane.margin>
|
||||
<Insets top="20.0"/>
|
||||
</BorderPane.margin>
|
||||
</VBox>
|
||||
</top>
|
||||
</BorderPane>
|
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 21 KiB |
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import java.lang.*?>
|
||||
<?import java.util.*?>
|
||||
<?import javafx.scene.*?>
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
|
||||
<?import javafx.scene.text.Text?>
|
||||
<BorderPane xmlns:fx="http://javafx.com/fxml" style="-fx-background-color: skyblue;" minWidth="500" fx:controller="view.CaptorWindow">
|
||||
|
||||
<left>
|
||||
<BorderPane style="-fx-background-color: white;">
|
||||
<top>
|
||||
<TreeView fx:id="lvCaptors" maxWidth="200"/>
|
||||
</top>
|
||||
<bottom>
|
||||
<Button style="-fx-background-color: transparent; -fx-font-weight: bold;" mnemonicParsing="false" onAction="#buttonExit" text="Fermer" BorderPane.alignment="CENTER" />
|
||||
</bottom>
|
||||
</BorderPane>
|
||||
</left>
|
||||
|
||||
<center>
|
||||
<BorderPane fx:id="master">
|
||||
<top>
|
||||
<VBox>
|
||||
<HBox>
|
||||
<Text text="UUID :" style="-fx-fill: white; -fx-font-weight: bold;"/>
|
||||
<Label fx:id="id" maxWidth="250"/>
|
||||
</HBox>
|
||||
<HBox>
|
||||
<Text text="NOM :" style="-fx-fill: white; -fx-font-weight: bold;" />
|
||||
<TextField fx:id="nom" maxWidth="250"/>
|
||||
</HBox>
|
||||
</VBox>
|
||||
</top>
|
||||
<bottom>
|
||||
<HBox>
|
||||
<Button mnemonicParsing="false" text="Image" onAction="#openWindowImage"/>
|
||||
<Button mnemonicParsing="false" text="Thermostat" onAction="#openWindowThermosta"/>
|
||||
</HBox>
|
||||
</bottom>
|
||||
</BorderPane>
|
||||
</center>
|
||||
|
||||
</BorderPane>
|
||||
|
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.image.ImageView?>
|
||||
<?import javafx.scene.layout.BorderPane?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.layout.StackPane?>
|
||||
<BorderPane prefHeight="250.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/18"
|
||||
xmlns:fx="http://javafx.com/fxml/1">
|
||||
<top>
|
||||
<Label fx:id="nom" style="-fx-font-weight: bold; -fx-font-size: 22;" BorderPane.alignment="CENTER"/>
|
||||
</top>
|
||||
<center>
|
||||
<StackPane>
|
||||
<ImageView fx:id="image" fitHeight="350.0" fitWidth="500.0" pickOnBounds="true" preserveRatio="true" BorderPane.alignment="CENTER"/>
|
||||
<Label fx:id="labelTemp" style="-fx-font-weight: bold;" BorderPane.alignment="CENTER"/>
|
||||
</StackPane>
|
||||
</center>
|
||||
<bottom>
|
||||
<Button style="-fx-background-color: transparent; -fx-font-weight: bold;" mnemonicParsing="false" onAction="#buttonExit" text="Fermer" BorderPane.alignment="CENTER">
|
||||
<BorderPane.margin>
|
||||
<Insets bottom="30.0" top="50.0"/>
|
||||
</BorderPane.margin>
|
||||
</Button>
|
||||
</bottom>
|
||||
</BorderPane>
|
@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.Slider?>
|
||||
<?import javafx.scene.layout.BorderPane?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.layout.VBox?>
|
||||
<?import javafx.scene.text.Text?>
|
||||
|
||||
<BorderPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/18"
|
||||
xmlns:fx="http://javafx.com/fxml/1">
|
||||
<center>
|
||||
<Slider orientation="VERTICAL" BorderPane.alignment="CENTER" fx:id="slider" onMouseClicked="#onChange"
|
||||
onMouseDragged="#onChange" showTickLabels="true" showTickMarks="true" min="-30" max="70" value="0">
|
||||
<BorderPane.margin>
|
||||
<Insets/>
|
||||
</BorderPane.margin>
|
||||
</Slider>
|
||||
</center>
|
||||
<bottom>
|
||||
<Button style="-fx-background-color: transparent; -fx-font-weight: bold;" mnemonicParsing="false" onAction="#buttonExit" text="Fermer" BorderPane.alignment="CENTER">
|
||||
<BorderPane.margin>
|
||||
<Insets bottom="30.0" top="50.0"/>
|
||||
</BorderPane.margin>
|
||||
</Button>
|
||||
</bottom>
|
||||
<top>
|
||||
<VBox alignment="CENTER" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
|
||||
prefHeight="50.0" prefWidth="100.0" BorderPane.alignment="CENTER">
|
||||
<children>
|
||||
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Thermostat"/>
|
||||
<HBox prefHeight="100.0" prefWidth="200.0">
|
||||
<children>
|
||||
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Température :">
|
||||
<HBox.margin>
|
||||
<Insets right="5.0"/>
|
||||
</HBox.margin>
|
||||
</Text>
|
||||
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="XXX" fx:id="valTemperature"/>
|
||||
</children>
|
||||
</HBox>
|
||||
</children>
|
||||
<BorderPane.margin>
|
||||
<Insets top="20.0"/>
|
||||
</BorderPane.margin>
|
||||
</VBox>
|
||||
</top>
|
||||
</BorderPane>
|
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 21 KiB |
@ -0,0 +1,29 @@
|
||||
package launcher;
|
||||
|
||||
import model.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class Console {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
// Captor with GenCPU
|
||||
Captor captor1 = new CaptorBasic("France", new GenCPU());
|
||||
System.out.println(captor1.getId() + ": " + captor1.getName() + ", temperature : " + captor1.getTemperature());
|
||||
|
||||
// Captor with GenRandom
|
||||
Captor captor2 = new CaptorBasic("Italie", new GenBoundedRandom(-10, 60));
|
||||
System.out.println(captor2.getId() + ": " + captor2.getName() + ", temperature : " + captor2.getTemperature());
|
||||
|
||||
|
||||
// CaptorArea
|
||||
Captor captorZone = new CaptorArea("Europe", new HashMap<>());
|
||||
captorZone.addCaptor(captor1, 20.0);
|
||||
captorZone.addCaptor(captor2, 40.0);
|
||||
System.out.println(captorZone.getId() + ": " + captorZone.getName() + ", temperature : " + captorZone.getTemperature());
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package launcher;
|
||||
|
||||
import javafx.application.Application;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.scene.Parent;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.stage.Stage;
|
||||
import model.CaptorBasic;
|
||||
import model.GenCPU;
|
||||
import view.FXMLWindow;
|
||||
import view.ImageWindow;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class main extends Application {
|
||||
|
||||
@Override
|
||||
public void start(Stage stage) throws Exception {
|
||||
|
||||
/*FXMLWindow fxmlWindow = new FXMLWindow("/fxml/CaptorWindow.fxml", "Home");
|
||||
fxmlWindow.show();*/
|
||||
|
||||
Parent page = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/CaptorWindow.fxml")));
|
||||
Scene scene = new Scene(page);
|
||||
stage.setScene(scene);
|
||||
stage.setResizable(false);
|
||||
stage.setTitle("Home");
|
||||
stage.show();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package model;
|
||||
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.scene.control.TreeItem;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public abstract class Captor extends Observable {
|
||||
|
||||
private UUID id;
|
||||
private StringProperty name;
|
||||
private double value;
|
||||
private double time;
|
||||
|
||||
public Captor(String name) {
|
||||
this.id = UUID.randomUUID();
|
||||
this.name = new SimpleStringProperty(name);
|
||||
this.time = 4;
|
||||
}
|
||||
|
||||
public UUID getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public StringProperty getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = new SimpleStringProperty(name);
|
||||
}
|
||||
|
||||
public abstract double getTemperature();
|
||||
|
||||
public abstract List<Captor> getCaptors() throws Exception;
|
||||
|
||||
public abstract GenStrategy getGenStrategy() throws Exception;
|
||||
|
||||
public abstract void setGenStrategy(GenStrategy genStrategy) throws Exception;
|
||||
|
||||
public abstract void addCaptor(Captor captor, double weight) throws Exception;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.name.getValue();
|
||||
}
|
||||
|
||||
public double getTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
public void setTime(double time) {
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
public double getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(double value) {
|
||||
this.value = value;
|
||||
this.notifyAllObservers();
|
||||
}
|
||||
|
||||
public abstract TreeItem<Captor> accept(VisitorCaptor visitorCaptor) throws Exception;
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package model;
|
||||
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.scene.control.TreeItem;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class CaptorArea extends Captor {
|
||||
|
||||
Map<Captor, Double> captors = new HashMap<>();
|
||||
|
||||
public CaptorArea(String name, Map<Captor, Double> captors) {
|
||||
super(name);
|
||||
this.captors = captors;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GenStrategy getGenStrategy() throws Exception {
|
||||
throw new Exception("Impossible de renvoyer la strategie");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGenStrategy(GenStrategy genStrategy) throws Exception {
|
||||
throw new Exception("Impossible de renvoyer la strategie");
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTemperature() {
|
||||
double temperatureSum = 0.0;
|
||||
double weightSum = 0.0;
|
||||
|
||||
for (Map.Entry<Captor, Double> entry : captors.entrySet()) {
|
||||
Captor captor = entry.getKey();
|
||||
double weight = entry.getValue();
|
||||
|
||||
temperatureSum += captor.getTemperature() * weight;
|
||||
weightSum += weight;
|
||||
}
|
||||
|
||||
return temperatureSum / weightSum;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Captor> getCaptors() throws Exception {
|
||||
List<Captor> captor = new ArrayList<>();
|
||||
for (Map.Entry<Captor, Double> entry : captors.entrySet()) {
|
||||
captor.add(entry.getKey());
|
||||
}
|
||||
return captor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCaptor(Captor captor, double weight) throws Exception {
|
||||
captors.put(captor, weight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TreeItem<Captor> accept(VisitorCaptor visitorCaptor) throws Exception {
|
||||
return visitorCaptor.visit(this);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package model;
|
||||
|
||||
import javafx.animation.Animation;
|
||||
import javafx.animation.KeyFrame;
|
||||
import javafx.animation.Timeline;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.scene.control.TreeItem;
|
||||
import javafx.util.Duration;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class CaptorBasic extends Captor implements Runnable {
|
||||
|
||||
private GenStrategy genStrategie;
|
||||
|
||||
public CaptorBasic(String name, GenStrategy genStrategie) {
|
||||
super(name);
|
||||
this.genStrategie = genStrategie;
|
||||
setValue(this.getTemperature());
|
||||
run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTemperature() {
|
||||
return this.genStrategie.generate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Captor> getCaptors() throws Exception {
|
||||
throw new Exception("Impossible de retourner la liste des capteurs");
|
||||
}
|
||||
|
||||
@Override
|
||||
public GenStrategy getGenStrategy() {
|
||||
return this.genStrategie;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGenStrategy(GenStrategy genStrategie) {
|
||||
this.genStrategie = genStrategie;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCaptor(Captor captor, double weight) throws Exception {
|
||||
throw new Exception("Impossible d'ajouter un capteur dans cette classe");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Timeline time = new Timeline(
|
||||
new KeyFrame(Duration.seconds(this.getTime()), event -> {
|
||||
if (getGenStrategy() != null) {
|
||||
this.setValue(this.getGenStrategy().generate());
|
||||
}
|
||||
}
|
||||
));
|
||||
|
||||
time.setCycleCount(Animation.INDEFINITE);
|
||||
time.play();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TreeItem<Captor> accept(VisitorCaptor visitorCaptor) {
|
||||
return visitorCaptor.visit(this);
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package model;
|
||||
|
||||
import javafx.beans.property.ListProperty;
|
||||
import javafx.beans.property.SimpleListProperty;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class CaptorStationStub {
|
||||
|
||||
private ObservableList<Captor> captors = FXCollections.observableArrayList();
|
||||
private ListProperty<Captor> groupe = new SimpleListProperty<>(captors);
|
||||
|
||||
public CaptorStationStub() throws Exception {
|
||||
|
||||
Captor captor1 = new CaptorBasic("France", new GenCPU());
|
||||
Captor captor2 = new CaptorBasic("Italie", new GenBoundedRandom(-10, 60));
|
||||
|
||||
// CaptorArea
|
||||
Captor captorZone = new CaptorArea("Europe", new HashMap<>()){{
|
||||
addCaptor(captor1, 20.0);
|
||||
addCaptor(captor2, 40.0);
|
||||
}};
|
||||
|
||||
this.captors.add(captor1);
|
||||
this.captors.add(captor2);
|
||||
this.captors.add(captorZone);
|
||||
|
||||
}
|
||||
|
||||
public ObservableList<Captor> getGroupe() {
|
||||
return groupe.get();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package model;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class GenBoundedRandom implements GenStrategy {
|
||||
|
||||
private double min;
|
||||
private double max;
|
||||
|
||||
public GenBoundedRandom(double min, double max) {
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
public void setMax(double max) {
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
public void setMin(double min) {
|
||||
this.min = min;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double generate() {
|
||||
Random random = new Random();
|
||||
return random.nextDouble(min, max);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package model;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class GenCPU implements GenStrategy {
|
||||
|
||||
@Override
|
||||
public double generate() {
|
||||
|
||||
File file = new File("/sys/class/thermal/thermal_zone2/temp");
|
||||
Scanner scanner = null;
|
||||
String line = null;
|
||||
try {
|
||||
scanner = new Scanner(file);
|
||||
|
||||
while (scanner.hasNextLine()) {
|
||||
line = scanner.nextLine();
|
||||
while (line.length() > 0 && line.charAt(line.length() - 1) == '0') {
|
||||
line = line.substring(0, line.length() - 1);
|
||||
}
|
||||
|
||||
}
|
||||
scanner.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return Double.parseDouble(line);
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package model;
|
||||
|
||||
public interface GenStrategy {
|
||||
|
||||
public default double generate() {
|
||||
return (int) (Math.random() * (100 + 1));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class Observable {
|
||||
|
||||
private List<Observer> observers = new ArrayList<>();
|
||||
|
||||
public void add(Observer o) {
|
||||
observers.add(o);
|
||||
}
|
||||
|
||||
public void remove(Observer o) {
|
||||
observers.remove(o);
|
||||
}
|
||||
|
||||
public void notifyAllObservers() {
|
||||
for(Observer o : observers) {
|
||||
o.update();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package model;
|
||||
|
||||
public interface Observer {
|
||||
public abstract void update();
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package model;
|
||||
|
||||
import javafx.scene.control.TreeItem;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
|
||||
public class VisitorCaptor {
|
||||
|
||||
public TreeItem<Captor> visit(CaptorArea captor) throws Exception {
|
||||
TreeItem<Captor> itemCaptor = new TreeItem<>(captor, new ImageView(new Image(getClass().getResourceAsStream("/images/multi_captor_icon.png"))));
|
||||
itemCaptor.setExpanded(true);
|
||||
for (Captor c : captor.getCaptors()) {
|
||||
itemCaptor.getChildren().add(c.accept(this));
|
||||
}
|
||||
return itemCaptor;
|
||||
}
|
||||
|
||||
public TreeItem<Captor> visit(CaptorBasic captor){
|
||||
TreeItem<Captor> itemCaptor = new TreeItem<>(captor, new ImageView(new Image(getClass().getResourceAsStream("/images/captor_icon.png"))));
|
||||
return itemCaptor;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package view;
|
||||
|
||||
import model.Captor;
|
||||
import model.Observer;
|
||||
|
||||
public class CaptorMonitorWindow extends FXMLWindow implements Observer {
|
||||
|
||||
|
||||
private Captor captor;
|
||||
|
||||
public CaptorMonitorWindow(String title, String pathFxmlRessource, Captor captor) {
|
||||
super(title, pathFxmlRessource);
|
||||
this.captor = captor;
|
||||
this.captor.add(this);
|
||||
}
|
||||
|
||||
public Captor getCaptor() {
|
||||
return this.captor;
|
||||
}
|
||||
|
||||
public void setCaptor(Captor captor) {
|
||||
this.captor = captor;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,84 @@
|
||||
package view;
|
||||
|
||||
import javafx.application.Platform;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.layout.BorderPane;
|
||||
import model.Captor;
|
||||
import model.CaptorStationStub;
|
||||
import model.VisitorCaptor;
|
||||
|
||||
public class CaptorWindow {
|
||||
|
||||
@FXML
|
||||
private TreeView<Captor> lvCaptors;
|
||||
@FXML
|
||||
private Label id;
|
||||
@FXML
|
||||
private TextField nom;
|
||||
@FXML
|
||||
private BorderPane master;
|
||||
private CaptorStationStub captors = new CaptorStationStub();
|
||||
|
||||
public CaptorWindow() throws Exception {
|
||||
}
|
||||
|
||||
@FXML
|
||||
private void initialize() throws Exception {
|
||||
TreeItem<Captor> root = new TreeItem<>();
|
||||
root.setExpanded(true);
|
||||
VisitorCaptor visitorCaptor = new VisitorCaptor();
|
||||
for (Captor captor : captors.getGroupe()) {
|
||||
root.getChildren().add(captor.accept(visitorCaptor));
|
||||
//root.getChildren().add(toTreeItem(captor));
|
||||
}
|
||||
lvCaptors.setRoot(root);
|
||||
lvCaptors.setShowRoot(false);
|
||||
master.setVisible(false);
|
||||
|
||||
lvCaptors.getSelectionModel().selectedItemProperty().addListener((obs, oldV, newV) -> {
|
||||
if(oldV != null) {
|
||||
id.textProperty().unbind();
|
||||
nom.textProperty().unbindBidirectional(oldV.getValue().getName());
|
||||
master.setVisible(false);
|
||||
}
|
||||
if(newV != null) {
|
||||
id.setText(newV.getValue().getId().toString());
|
||||
nom.textProperty().bindBidirectional(newV.getValue().getName());
|
||||
master.setVisible(true);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
public TreeItem<Captor> toTreeItem(Captor captor) throws Exception {
|
||||
TreeItem<Captor> itemCaptor = new TreeItem<>(captor);
|
||||
if (captor instanceof CaptorArea) {
|
||||
itemCaptor.setExpanded(true);
|
||||
for (Captor c : captor.getCaptors()) {
|
||||
itemCaptor.getChildren().add(toTreeItem(c));
|
||||
}
|
||||
}
|
||||
return itemCaptor;
|
||||
}*/
|
||||
|
||||
public void openWindowImage(ActionEvent actionEvent) {
|
||||
Captor selectedCaptor = lvCaptors.getSelectionModel().getSelectedItem().getValue();
|
||||
ImageWindow imageWindow = new ImageWindow(selectedCaptor);
|
||||
imageWindow.setResizable(false);
|
||||
imageWindow.show();
|
||||
}
|
||||
|
||||
public void openWindowThermosta(ActionEvent actionEvent) {
|
||||
Captor selectedCaptor = lvCaptors.getSelectionModel().getSelectedItem().getValue();
|
||||
ThermostatWindow thermostaWindow = new ThermostatWindow(selectedCaptor);
|
||||
thermostaWindow.setResizable(false);
|
||||
thermostaWindow.show();
|
||||
}
|
||||
|
||||
public void buttonExit(ActionEvent actionEvent) {
|
||||
Platform.exit();
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package view;
|
||||
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.scene.Parent;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.scene.Scene;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
|
||||
public class FXMLWindow extends Stage {
|
||||
|
||||
public FXMLWindow(String title, String pathFxmlRessource) {
|
||||
try {
|
||||
//Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource(pathFxmlRessource)));
|
||||
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(pathFxmlRessource));
|
||||
fxmlLoader.setController(this);
|
||||
Parent root = fxmlLoader.load();
|
||||
setTitle(title);
|
||||
setScene(new Scene(root));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package view;
|
||||
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.stage.Stage;
|
||||
import model.Captor;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.NavigableMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
public class ImageWindow extends CaptorMonitorWindow {
|
||||
|
||||
@FXML
|
||||
private ImageView image;
|
||||
@FXML
|
||||
private Label nom;
|
||||
@FXML
|
||||
private Label labelTemp;
|
||||
|
||||
private static NavigableMap<Double, String> Images = new TreeMap<>();
|
||||
|
||||
public ImageWindow(Captor captor) {
|
||||
super("Image", "/fxml/ImageWindow.fxml", captor);
|
||||
Images.put(25.0, "soleil");
|
||||
Images.put(0.0, "nuage");
|
||||
nom.textProperty().bind(this.getCaptor().getName());
|
||||
Images.put(-Double.MAX_VALUE, "neige");
|
||||
update();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void buttonExit() {
|
||||
Stage stage = (Stage) image.getScene().getWindow();
|
||||
stage.close();
|
||||
}
|
||||
|
||||
public void update() {
|
||||
Map.Entry<Double, String> entry = Images.floorEntry(this.getCaptor().getValue());
|
||||
if (entry != null && entry.getValue() != null) {
|
||||
image.setImage(new Image("/images/" + entry.getValue() + ".jpg"));
|
||||
}
|
||||
labelTemp.setText(String.format("%.2f°C", this.getCaptor().getValue()));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package view;
|
||||
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.Slider;
|
||||
import javafx.scene.text.Text;
|
||||
import javafx.stage.Stage;
|
||||
import model.Captor;
|
||||
|
||||
public class ThermostatWindow extends CaptorMonitorWindow{
|
||||
|
||||
@FXML
|
||||
private Text valTemperature;
|
||||
|
||||
@FXML
|
||||
private Slider slider;
|
||||
|
||||
public ThermostatWindow(Captor captor) {
|
||||
super("Thermosta", "/fxml/ThermostatWindow.fxml", captor);
|
||||
}
|
||||
|
||||
public void initialize() {
|
||||
//slider.valueProperty().bindBidirectional(getCaptor().getValue());
|
||||
//valTemperature.textProperty().bind(getCaptor().getValue().asString());
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void onChange() {
|
||||
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void buttonExit() {
|
||||
Stage stage = (Stage) slider.getScene().getWindow();
|
||||
stage.close();
|
||||
}
|
||||
}
|