initial commit
This commit is contained in:
10
src/main/java/com/Stoppuhr/application/JavaFX11Main.java
Normal file
10
src/main/java/com/Stoppuhr/application/JavaFX11Main.java
Normal file
@ -0,0 +1,10 @@
|
||||
package main.java.com.Stoppuhr.application;
|
||||
|
||||
public class JavaFX11Main
|
||||
{
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
Main.main(args);
|
||||
}
|
||||
}
|
238
src/main/java/com/Stoppuhr/application/Main.java
Normal file
238
src/main/java/com/Stoppuhr/application/Main.java
Normal file
@ -0,0 +1,238 @@
|
||||
package main.java.com.Stoppuhr.application;
|
||||
|
||||
|
||||
import javafx.animation.Animation;
|
||||
import javafx.animation.KeyFrame;
|
||||
import javafx.animation.Timeline;
|
||||
import javafx.animation.Animation.Status;
|
||||
import javafx.application.Application;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.FXMLLoader;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.util.Duration;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Alert;
|
||||
import javafx.scene.control.Alert.AlertType;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.MenuItem;
|
||||
import javafx.scene.layout.AnchorPane;
|
||||
|
||||
/**
|
||||
* Praktikum OOSE SS 2018 Aufgabenblatt 3, Aufgabe 4
|
||||
*
|
||||
* @author [Hendrik Schutter]
|
||||
*/
|
||||
|
||||
public class Main extends Application
|
||||
{
|
||||
|
||||
@FXML
|
||||
private Label zeitAnzeige;
|
||||
|
||||
@FXML
|
||||
private AnchorPane mainAnchorpane;
|
||||
|
||||
@FXML
|
||||
private MenuItem menuItemStart;
|
||||
|
||||
@FXML
|
||||
private MenuItem menuItemReset;
|
||||
|
||||
@FXML
|
||||
private MenuItem menuItemClose;
|
||||
|
||||
@FXML
|
||||
private MenuItem menuItemHilfe;
|
||||
|
||||
@FXML
|
||||
private Button startStopButton;
|
||||
|
||||
@FXML
|
||||
private Button resetButton;
|
||||
|
||||
private static Timeline timeline;
|
||||
|
||||
private int min = 0;
|
||||
|
||||
private int sec = 0;
|
||||
|
||||
private int mil = 0;
|
||||
|
||||
private static boolean timer = true;
|
||||
|
||||
@Override
|
||||
public void start(Stage primaryStage)
|
||||
{
|
||||
try {
|
||||
FXMLLoader loader = new FXMLLoader(
|
||||
getClass().getResource("/fxml/MainWindow.fxml"));
|
||||
AnchorPane pane = loader.load();
|
||||
primaryStage.setTitle("Stoppuhr");
|
||||
Scene scene = new Scene(pane);
|
||||
/**
|
||||
* alle event listener mit fxml-loader
|
||||
*
|
||||
*/
|
||||
scene.getStylesheets().add(
|
||||
Main.class.getResource("/css/application.css").toExternalForm());
|
||||
primaryStage.setScene(scene);
|
||||
primaryStage.show();
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void menuItemStartAction(ActionEvent event)
|
||||
{
|
||||
startOrStopCounting();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void menuItemResetAction(ActionEvent event)
|
||||
{
|
||||
resetTime();
|
||||
updateTimeLabel();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void menuItemCloseAction(ActionEvent event)
|
||||
{
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void menuItemHilfeAction(ActionEvent event)
|
||||
{
|
||||
Alert alert = new Alert(AlertType.INFORMATION);
|
||||
alert.setTitle("Information");
|
||||
alert.setHeaderText("Praktikum OOSE SS 2018 Aufgabenblatt 3, Aufgabe 4");
|
||||
alert.setContentText("Author: Hendrik Schutter - 183129");
|
||||
alert.showAndWait();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void startStopButtonAction(ActionEvent event)
|
||||
{
|
||||
startOrStopCounting();
|
||||
}
|
||||
|
||||
@FXML
|
||||
public void resetButtonAction(ActionEvent event)
|
||||
{
|
||||
resetTime();
|
||||
updateTimeLabel();
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
launch(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Aktualisiert die Zeitanzeige.
|
||||
*/
|
||||
private void updateTimeLabel()
|
||||
{
|
||||
if (mil > 99) {
|
||||
sec = sec + 1;
|
||||
mil = 0;
|
||||
}
|
||||
|
||||
if (sec > 59) {
|
||||
min = min + 1;
|
||||
sec = 0;
|
||||
}
|
||||
|
||||
String timeMin = Integer.toString(min);
|
||||
String timeSec = Integer.toString(sec);
|
||||
String timeMil = Integer.toString(mil);
|
||||
|
||||
if (mil < 10) {
|
||||
timeMil = "0" + Integer.toString(mil);
|
||||
}
|
||||
|
||||
if (sec < 10) {
|
||||
timeSec = "0" + Integer.toString(sec);
|
||||
}
|
||||
|
||||
if (min < 10) {
|
||||
timeMin = "0" + Integer.toString(min);
|
||||
}
|
||||
|
||||
String time = timeMin + ":" + timeSec + ":" + timeMil;
|
||||
|
||||
zeitAnzeige.setText(time);
|
||||
|
||||
// System.out.println("Die Zeit: " + time);
|
||||
|
||||
// Text im Label neu setzen
|
||||
}
|
||||
|
||||
/**
|
||||
* Diese Methode startet bzw. stoppt die Uhr. Sie soll beim Drücken des
|
||||
* Start/Stop-Buttons aufgerufen werden.
|
||||
*/
|
||||
private void startOrStopCounting()
|
||||
{
|
||||
// Je nachdem, ob die Uhr gerade läuft oder nicht:
|
||||
// Timer pausieren oder starten, dann
|
||||
|
||||
if (timer) {
|
||||
timeline = new Timeline(new KeyFrame(Duration.millis(10), event -> {
|
||||
incrementTime(); // update time
|
||||
}));
|
||||
timeline.setCycleCount(Animation.INDEFINITE);
|
||||
timer = false;
|
||||
}
|
||||
if (timeline.getStatus() == Status.STOPPED
|
||||
|| timeline.getStatus() == Status.PAUSED) {
|
||||
timeline.play();
|
||||
startStopButton.setText("Stop");
|
||||
menuItemStart.setText("Stop");
|
||||
} else {
|
||||
timeline.stop();
|
||||
startStopButton.setText("Start");
|
||||
menuItemStart.setText("Start");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Diese Methode setzt die Uhr auf 00:00:00 zurück. Sie soll beim Drücken des
|
||||
* Start/Stop-Buttons aufgerufen werden.
|
||||
*/
|
||||
private void resetTime()
|
||||
{
|
||||
min = 0;
|
||||
sec = 0;
|
||||
mil = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Diese Methode erhöht die Zeit um eine hunderstel Sekunde. Sie muss vom
|
||||
* Timer (s. Methode 'start') jede hundertstel Sekunde aufgerufen werden.
|
||||
*/
|
||||
private void incrementTime()
|
||||
{
|
||||
// Zeitvariable(n) erhöhen
|
||||
// und Anzeige aktualisieren
|
||||
|
||||
mil = mil + 1;
|
||||
updateTimeLabel();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class InnerClassHandler implements EventHandler<ActionEvent>
|
||||
{
|
||||
@Override
|
||||
public void handle(ActionEvent event)
|
||||
{
|
||||
System.out.println("text");
|
||||
}
|
||||
}
|
1
src/main/resources/css/application.css
Normal file
1
src/main/resources/css/application.css
Normal file
@ -0,0 +1 @@
|
||||
/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */
|
71
src/main/resources/fxml/MainWindow.fxml
Normal file
71
src/main/resources/fxml/MainWindow.fxml
Normal file
@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.geometry.Insets?>
|
||||
<?import javafx.scene.control.Button?>
|
||||
<?import javafx.scene.control.Label?>
|
||||
<?import javafx.scene.control.Menu?>
|
||||
<?import javafx.scene.control.MenuBar?>
|
||||
<?import javafx.scene.control.MenuItem?>
|
||||
<?import javafx.scene.control.SeparatorMenuItem?>
|
||||
<?import javafx.scene.layout.AnchorPane?>
|
||||
<?import javafx.scene.layout.BorderPane?>
|
||||
<?import javafx.scene.layout.HBox?>
|
||||
<?import javafx.scene.text.Font?>
|
||||
|
||||
<AnchorPane fx:id="mainAnchorpane" maxHeight="400.0" maxWidth="500.0" minHeight="400.0" minWidth="500.0" prefHeight="400.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/9" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.java.com.Stoppuhr.application.Main">
|
||||
<children>
|
||||
<BorderPane prefHeight="400.0" prefWidth="500.0">
|
||||
<bottom>
|
||||
<HBox prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER">
|
||||
<children>
|
||||
<Button fx:id="startStopButton" maxHeight="30.0" maxWidth="60.0" minHeight="30.0" minWidth="60.0" mnemonicParsing="false" onAction="#startStopButtonAction" prefHeight="30.0" prefWidth="60.0" text="Start">
|
||||
<font>
|
||||
<Font name="Cantarell Regular" size="13.0" />
|
||||
</font>
|
||||
<HBox.margin>
|
||||
<Insets left="180.0" top="20.0" />
|
||||
</HBox.margin>
|
||||
</Button>
|
||||
<Button fx:id="resetButton" maxHeight="30.0" maxWidth="60.0" minHeight="30.0" minWidth="60.0" mnemonicParsing="false" onAction="#resetButtonAction" prefHeight="30.0" prefWidth="60.0" text="Reset">
|
||||
<font>
|
||||
<Font name="Cantarell Regular" size="13.0" />
|
||||
</font>
|
||||
<HBox.margin>
|
||||
<Insets left="20.0" top="20.0" />
|
||||
</HBox.margin>
|
||||
</Button>
|
||||
</children>
|
||||
</HBox>
|
||||
</bottom>
|
||||
<center>
|
||||
<Label fx:id="zeitAnzeige" text="00:00:00" textAlignment="CENTER" BorderPane.alignment="CENTER_LEFT">
|
||||
<font>
|
||||
<Font name="Cantarell Regular" size="96.0" />
|
||||
</font>
|
||||
<padding>
|
||||
<Insets left="45.0" />
|
||||
</padding>
|
||||
</Label>
|
||||
</center>
|
||||
<top>
|
||||
<MenuBar BorderPane.alignment="CENTER">
|
||||
<menus>
|
||||
<Menu mnemonicParsing="false" text="Aktion">
|
||||
<items>
|
||||
<MenuItem fx:id="menuItemStart" mnemonicParsing="false" onAction="#menuItemStartAction" text="Start" />
|
||||
<MenuItem fx:id="menuItemReset" mnemonicParsing="false" onAction="#menuItemResetAction" text="Reset" />
|
||||
<SeparatorMenuItem mnemonicParsing="false" />
|
||||
<MenuItem fx:id="menuItemClose" mnemonicParsing="false" onAction="#menuItemCloseAction" text="Beenden" />
|
||||
</items>
|
||||
</Menu>
|
||||
<Menu mnemonicParsing="false" text="Hilfe">
|
||||
<items>
|
||||
<MenuItem fx:id="menuItemHilfe" mnemonicParsing="false" onAction="#menuItemHilfeAction" text="Info" />
|
||||
</items>
|
||||
</Menu>
|
||||
</menus>
|
||||
</MenuBar>
|
||||
</top>
|
||||
</BorderPane>
|
||||
</children>
|
||||
</AnchorPane>
|
Reference in New Issue
Block a user