倒计时在JavaFX中的最大化显示

huangapple 未分类评论50阅读模式
标题翻译

Countdown in Javafx with maximize

问题

以下是您提供的代码的翻译部分:

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;

public class Main extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("/gui/Countdown.fxml"));
        Scene scene = new Scene(root);
        scene.getStylesheets().add("/gui/application.css");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
package application.controller.gui;

import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXComboBox;
import // other imports...

public class CountDownController implements Initializable {

    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private AnchorPane menuPane;

    @FXML
    private Text timerText;

    @FXML
    private JFXButton resertButton;

    @FXML
    private JFXButton pauseButton;

    @FXML
    private AnchorPane timerPane;

    @FXML
    private JFXComboBox<Integer> schwellWertStunden1;

    // other fields...

    @FXML
    void start(ActionEvent event) {
        startCountDown();
        Combo();
    }

    // other methods...

    @FXML
    void pauseAction(ActionEvent event) {
        thrd.stop();
    }

    // other methods...

    @FXML
    void resetAction(ActionEvent event1) {
        thrd.stop();
        timerText.setText("00:00:00");
        timerText.setFill(Color.BLACK);
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        ObservableList<Integer> stundenListe = FXCollections.observableArrayList();
        ObservableList<Integer> minutenSekunden = FXCollections.observableArrayList();
        
        // other initialization...

        startStunden.setItems(stundenListe);
        startStunden.setValue(0);
        schwellWertStunden1.setItems(stundenListe);
        schwellWertStunden1.setValue(0);
        schwellWertStunden2.setItems(stundenListe);
        schwellWertStunden2.setValue(0);

        startMinuten.setItems(minutenSekunden);
        startMinuten.setValue(0);

        schwellWertMinuten1.setItems(minutenSekunden);
        schwellWertMinuten2.setItems(minutenSekunden);
        schwellWertMinuten1.setValue(0);
        schwellWertMinuten2.setValue(0);
        startSekunden.setItems(minutenSekunden);
        startSekunden.setValue(0);
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXComboBox?>
<?import com.jfoenix.controls.JFXTabPane?>
<!-- Other imports... -->

<JFXTabPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
    prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1"
    fx:controller="application.controller.gui.CountDownController">
    <tabs>
        <!-- Tabs content... -->
    </tabs>
</JFXTabPane>

请注意,翻译的代码片段可能因格式或空格而有所变化,但逻辑结构和功能应该保持不变。

英文翻译

I am currently trying to develop a countdown which contains 3 values.

The first value how long the countdown should run, the 2nd value is from when the countdown turns orange and the 3rd from when the countdown turns red.
I have a problem with my countdown that spins around now and then, sometimes runs faster, when I resume the countdown it starts spinning!
I have a question, if I want to maximize the application, I want it to automatically enlarge all the objects in the scene.
the User interface was built with Scene Builder.
Thanks for your help.

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;

public class Main extends Application {
	@Override
	public void start(Stage stage) throws Exception   {
	    Parent root = FXMLLoader.load(getClass().getResource(&quot;/gui/Countdown.fxml&quot;));
		Scene scene = new Scene(root);
		scene.getStylesheets().add(&quot;/gui/application.css&quot;);
		stage.setScene(scene);
		stage.show();
	}

	public static void main(String[] args) {
		launch(args);
	}
}

package application.controller.gui;

import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXComboBox;
import java.net.URL;
import java.time.LocalTime;
import java.util.Map;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;

public class CountDownController implements Initializable {

	@FXML
	private ResourceBundle resources;

	@FXML
	private URL location;

	@FXML
	private AnchorPane menuPane;

	@FXML
	private Text timerText;

	@FXML
	private JFXButton resertButton;

	@FXML
	private JFXButton pauseButton;

	@FXML
	private AnchorPane timerPane;

	@FXML
	private JFXComboBox&lt;Integer&gt; schwellWertStunden1;

	@FXML
	private JFXComboBox&lt;Integer&gt; schwellWertMinuten1;

	@FXML
	private JFXComboBox&lt;Integer&gt; schwellWertStunden2;

	@FXML
	private JFXComboBox&lt;Integer&gt; schwellWertMinuten2;

	@FXML
	private JFXComboBox&lt;Integer&gt; startStunden;

	@FXML
	private JFXComboBox&lt;Integer&gt; startMinuten;

	@FXML
	private JFXComboBox&lt;Integer&gt; startSekunden;

	@FXML
	private JFXButton startButton;

	Map&lt;Integer, String&gt; numberMap;
	Integer currSeconds;
	Thread thrd;;

	@FXML
	void start(ActionEvent event) {
		startCountDown();
		Combo();
	}

	void startCountDown() {
		thrd = new Thread(new Runnable() {

			@SuppressWarnings(&quot;deprecation&quot;)
			@Override
			public void run() {
				try {
					LocalTime localTimeCounter = LocalTime.of(startStunden.getSelectionModel().getSelectedIndex(),
							startMinuten.getSelectionModel().getSelectedIndex(),
							startSekunden.getSelectionModel().getSelectedIndex());

					LocalTime localTimeSchwellwert1 = LocalTime.of(schwellWertStunden1.getValue(),
							schwellWertMinuten1.getValue());
					LocalTime localTimeSchwellwert2 = LocalTime.of(schwellWertStunden2.getValue(),
							schwellWertMinuten2.getValue());

					boolean bSchwellert1Erreicht = false;

					while (true) {
						localTimeCounter = localTimeCounter.minusSeconds(1);

						Thread.sleep(1000);

						timerText.setText(localTimeCounter.toString());

						if (localTimeCounter.isBefore(localTimeSchwellwert1) &amp;&amp; !bSchwellert1Erreicht) {
							timerText.setFill(Color.ORANGE);

							bSchwellert1Erreicht = true;
						}

						if (localTimeCounter.isBefore(localTimeSchwellwert2)) {
							timerText.setFill(Color.RED);
						}

						if (localTimeCounter.toSecondOfDay() &lt;= 0) {
							thrd.stop();
						}
					}
				} catch (Exception e) {
					// TODO: handle exception
				}
			}
		});
		thrd.start();
	}

	@FXML
	@SuppressWarnings(&quot;deprecation&quot;)
	void pauseAction(ActionEvent event) {
		thrd.stop();
	}

	void siZe() {

	}

	void Combo() {
		if (schwellWertMinuten1.getSelectionModel().getSelectedIndex() &lt;= schwellWertMinuten2.getSelectionModel()
				.getSelectedIndex()) {
			Alert alert = new Alert(AlertType.ERROR);
			alert.setTitle(&quot;Bitte &#252;berpr&#252;fen sie denn Schwellwert 2!&quot;);
			alert.setHeaderText(&quot;Der Schwellwert 2 darf nicht kleiner oder gleich Schwellwert 1 sein!&quot;);
			alert.setContentText(&quot;&quot;);

			alert.showAndWait();
		}
	}

	@SuppressWarnings(&quot;deprecation&quot;)
	@FXML
	void resetAction(ActionEvent event1) {
		thrd.stop();
		timerText.setText(&quot;00:00:00&quot;);
		timerText.setFill(Color.BLACK);
	}

	@Override
	public void initialize(URL location, ResourceBundle resources) {
		ObservableList&lt;Integer&gt; stundenListe = FXCollections.observableArrayList();
		ObservableList&lt;Integer&gt; minutenSekunden = FXCollections.observableArrayList();

		for (int i = 0; i &lt;= 60; i++) {
			if (0 &lt;= i &amp;&amp; i &lt;= 24) {
				stundenListe.add(new Integer(i));
			}
			minutenSekunden.add(new Integer(i));
		}
		startStunden.setItems(stundenListe);
		startStunden.setValue(0);
		schwellWertStunden1.setItems(stundenListe);
		schwellWertStunden1.setValue(0);
		schwellWertStunden2.setItems(stundenListe);
		schwellWertStunden2.setValue(0);

		startMinuten.setItems(minutenSekunden);
		startMinuten.setValue(0);

		schwellWertMinuten1.setItems(minutenSekunden);
		schwellWertMinuten2.setItems(minutenSekunden);
		schwellWertMinuten1.setValue(0);
		schwellWertMinuten2.setValue(0);
		startSekunden.setItems(minutenSekunden);
		startSekunden.setValue(0);
	}
}

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

&lt;?import com.jfoenix.controls.JFXButton?&gt;
&lt;?import com.jfoenix.controls.JFXComboBox?&gt;
&lt;?import com.jfoenix.controls.JFXTabPane?&gt;
&lt;?import javafx.geometry.Insets?&gt;
&lt;?import javafx.scene.control.Tab?&gt;
&lt;?import javafx.scene.image.Image?&gt;
&lt;?import javafx.scene.image.ImageView?&gt;
&lt;?import javafx.scene.layout.AnchorPane?&gt;
&lt;?import javafx.scene.layout.VBox?&gt;
&lt;?import javafx.scene.text.Font?&gt;
&lt;?import javafx.scene.text.Text?&gt;

&lt;JFXTabPane maxHeight=&quot;-Infinity&quot; maxWidth=&quot;-Infinity&quot; minHeight=&quot;-Infinity&quot; minWidth=&quot;-Infinity&quot; prefHeight=&quot;400.0&quot; prefWidth=&quot;600.0&quot; xmlns=&quot;http://javafx.com/javafx/8.0.171&quot; xmlns:fx=&quot;http://javafx.com/fxml/1&quot; fx:controller=&quot;application.controller.gui.CountDownController&quot;&gt;
	&lt;tabs&gt;
		&lt;Tab closable=&quot;false&quot; text=&quot;Countdown&quot;&gt;
			&lt;content&gt;
				&lt;VBox alignment=&quot;CENTER&quot; spacing=&quot;20.0&quot; style=&quot;-fx-background-color: white&quot;&gt;
					&lt;children&gt;
						&lt;Text fx:id=&quot;timerText&quot; strokeType=&quot;OUTSIDE&quot; strokeWidth=&quot;0.0&quot; text=&quot;00:00:00 &quot; textOrigin=&quot;CENTER&quot; wrappingWidth=&quot;398.00001430511475&quot;&gt;
							&lt;font&gt;
								&lt;Font size=&quot;96.0&quot; /&gt;
							&lt;/font&gt;
						&lt;/Text&gt;
						&lt;JFXButton fx:id=&quot;pauseButton&quot; alignment=&quot;TOP_RIGHT&quot; onAction=&quot;#pauseAction&quot; prefHeight=&quot;100.0&quot; prefWidth=&quot;100.0&quot;&gt;
							&lt;graphic&gt;
								&lt;ImageView fitHeight=&quot;91.0&quot; fitWidth=&quot;109.0&quot; pickOnBounds=&quot;true&quot; preserveRatio=&quot;true&quot;&gt;
									&lt;image&gt;
										&lt;Image url=&quot;@../../../../../2000px-Gnome-media-playback-pause.svg.png&quot; /&gt;
									&lt;/image&gt;
								&lt;/ImageView&gt;
							&lt;/graphic&gt;
						&lt;/JFXButton&gt;
						&lt;JFXButton fx:id=&quot;resertButton&quot; alignment=&quot;TOP_RIGHT&quot; onAction=&quot;#resetAction&quot; prefHeight=&quot;100.0&quot; prefWidth=&quot;100.0&quot;&gt;
							&lt;graphic&gt;
								&lt;ImageView fitHeight=&quot;65.0&quot; fitWidth=&quot;109.0&quot; pickOnBounds=&quot;true&quot; preserveRatio=&quot;true&quot;&gt;
									&lt;image&gt;
										&lt;Image url=&quot;@../../../../../icon-1294478_960_720.png&quot; /&gt;
									&lt;/image&gt;
								&lt;/ImageView&gt;
							&lt;/graphic&gt;
						&lt;/JFXButton&gt;
					&lt;/children&gt;
				&lt;/VBox&gt;
			&lt;/content&gt;
		&lt;/Tab&gt;
		&lt;Tab text=&quot;Werte&quot;&gt;
			&lt;content&gt;
				&lt;AnchorPane fx:id=&quot;timerPane&quot; minHeight=&quot;0.0&quot; minWidth=&quot;0.0&quot; prefHeight=&quot;200.0&quot; prefWidth=&quot;951.0&quot; style=&quot;-fx-background-color: white;&quot;&gt;
					&lt;children&gt;
						&lt;Text layoutX=&quot;170.0&quot; layoutY=&quot;110.0&quot; strokeType=&quot;OUTSIDE&quot; strokeWidth=&quot;0.0&quot; text=&quot;Startwert:&quot; wrappingWidth=&quot;127.21630859375&quot;&gt;
							&lt;font&gt;
								&lt;Font size=&quot;29.0&quot; /&gt;
							&lt;/font&gt;
						&lt;/Text&gt;
						&lt;Text fill=&quot;#ffcd05&quot; layoutX=&quot;150.0&quot; layoutY=&quot;160.0&quot; strokeType=&quot;OUTSIDE&quot; strokeWidth=&quot;0.0&quot; text=&quot;  Schwellwert 1:&quot; wrappingWidth=&quot;198.41015625&quot;&gt;
							&lt;font&gt;
								&lt;Font size=&quot;29.0&quot; /&gt;
							&lt;/font&gt;
						&lt;/Text&gt;
						&lt;Text fill=&quot;#e40505&quot; layoutX=&quot;150.0&quot; layoutY=&quot;210.0&quot; strokeType=&quot;OUTSIDE&quot; strokeWidth=&quot;0.0&quot; text=&quot;  Schwellwert 2:&quot;&gt;
							&lt;font&gt;
								&lt;Font size=&quot;29.0&quot; /&gt;
							&lt;/font&gt;
						&lt;/Text&gt;
						&lt;JFXComboBox fx:id=&quot;startStunden&quot; labelFloat=&quot;true&quot; layoutX=&quot;350.0&quot; layoutY=&quot;79.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  std&quot; visible=&quot;false&quot; /&gt;
						&lt;JFXComboBox fx:id=&quot;startMinuten&quot; labelFloat=&quot;true&quot; layoutX=&quot;350.0&quot; layoutY=&quot;80.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  min&quot; /&gt;
						&lt;JFXComboBox fx:id=&quot;startSekunden&quot; disable=&quot;true&quot; labelFloat=&quot;true&quot; prefHeight=&quot;25.0&quot; prefWidth=&quot;50.0&quot; promptText=&quot; sek&quot; visible=&quot;false&quot; /&gt;
						&lt;JFXButton fx:id=&quot;startButton&quot; layoutX=&quot;249.0&quot; layoutY=&quot;262.0&quot; onAction=&quot;#start&quot; prefHeight=&quot;100.0&quot; prefWidth=&quot;100.0&quot; text=&quot;Start&quot;&gt;
							&lt;padding&gt;
								&lt;Insets left=&quot;25.0&quot; right=&quot;25.0&quot; /&gt;
							&lt;/padding&gt;
							&lt;graphic&gt;
								&lt;ImageView fitHeight=&quot;100.0&quot; fitWidth=&quot;100.0&quot; nodeOrientation=&quot;INHERIT&quot; pickOnBounds=&quot;true&quot; preserveRatio=&quot;true&quot;&gt;
									&lt;image&gt;
										&lt;Image url=&quot;@../../../../../play-97626_1280.png&quot; /&gt;
									&lt;/image&gt;
								&lt;/ImageView&gt;
							&lt;/graphic&gt;
						&lt;/JFXButton&gt;
						&lt;JFXComboBox fx:id=&quot;schwellWertStunden1&quot; labelFloat=&quot;true&quot; layoutX=&quot;350.0&quot; layoutY=&quot;130.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  std&quot; visible=&quot;false&quot; /&gt;
						&lt;JFXComboBox fx:id=&quot;schwellWertMinuten1&quot; labelFloat=&quot;true&quot; layoutX=&quot;350.0&quot; layoutY=&quot;131.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  min&quot; /&gt;
						&lt;JFXComboBox fx:id=&quot;schwellWertStunden2&quot; labelFloat=&quot;true&quot; layoutX=&quot;350.0&quot; layoutY=&quot;180.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  std&quot; visible=&quot;false&quot; /&gt;
						&lt;JFXComboBox fx:id=&quot;schwellWertMinuten2&quot; labelFloat=&quot;true&quot; layoutX=&quot;350.0&quot; layoutY=&quot;181.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  min&quot; /&gt;
					&lt;/children&gt;
				&lt;/AnchorPane&gt;
			&lt;/content&gt;
		&lt;/Tab&gt;
	&lt;/tabs&gt;
&lt;/JFXTabPane&gt;

答案1

得分: 0

以下是您提供的代码的翻译部分:

import java.net.URL;
import java.time.LocalTime;
import java.util.ResourceBundle;
import javafx.animation.PauseTransition;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.util.Duration;

public class CountDownController implements Initializable {

    // ...(省略其他 @FXML 注解的变量声明)

    @FXML
    void start(ActionEvent event) {
        startCountDown();
        Combo();
    }

    void startCountDown() {
        // ...(省略计时器逻辑部分)

        pauseTransition = new PauseTransition(Duration.seconds(.21));
        pauseTransition.setOnFinished(event -> {

            localTimeCounter = localTimeCounter.minusSeconds(1);
            timerText.setText(localTimeCounter.toString());

            if (localTimeCounter.isBefore(localTimeSchwellwert1) && !bSchwellert1Erreicht) {
                timerText.setFill(Color.ORANGE);
                bSchwellert1Erreicht = true;
            }

            if (localTimeCounter.isBefore(localTimeSchwellwert2)) {
                timerText.setFill(Color.RED);
            }

            if (localTimeCounter.toSecondOfDay() <= 0) {
                pauseTransition.stop();
                return;
            }
            pauseTransition.play();
        });
        pauseTransition.play();
    }

    // ...(省略其他方法的翻译)

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        ObservableList<Integer> stundenListe = FXCollections.observableArrayList();
        ObservableList<Integer> minutenSekunden = FXCollections.observableArrayList();

        for (int i = 0; i <= 60; i++) {
            if (0 <= i && i <= 24) {
                stundenListe.add(i);
            }
            minutenSekunden.add(i);
        }
        startStunden.setItems(stundenListe);
        startStunden.setValue(0);
        schwellWertStunden1.setItems(stundenListe);
        schwellWertStunden1.setValue(0);
        schwellWertStunden2.setItems(stundenListe);
        schwellWertStunden2.setValue(0);
        startMinuten.setItems(minutenSekunden);
        startMinuten.setValue(0);

        schwellWertMinuten1.setItems(minutenSekunden);
        schwellWertMinuten2.setItems(minutenSekunden);
        schwellWertMinuten1.setValue(0);
        schwellWertMinuten2.setValue(0);
        startSekunden.setItems(minutenSekunden);
        startSekunden.setValue(0);
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.TabPane?>
<!-- ...(省略其他导入语句) -->
<TabPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"
         xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gui.CountDownController">
    <tabs>
        <Tab closable="false" text="倒计时">
            <content>
                <VBox alignment="CENTER" spacing="20.0" style="-fx-background-color: white">
                    <!-- ...(省略其他内容) -->
                </VBox>
            </content>
        </Tab>
        <Tab text="数值">
            <content>
                <AnchorPane fx:id="timerPane" minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="951.0" style="-fx-background-color: white;">
                    <!-- ...(省略其他内容) -->
                </AnchorPane>
            </content>
        </Tab>
    </tabs>
</TabPane>

以上是您提供的 Java 代码和 FXML 布局的翻译。如果您有其他问题或需要进一步帮助,请随时问我。

英文翻译

To change the properties of nodes in a JavaFx based gui use a JavaFx animation tool.<br/>
The following mre uses a PauseTransition instance for the job. <br/>
To make the code independent on JFoenix I used JavaFx components:

import java.net.URL;
import java.time.LocalTime;
import java.util.ResourceBundle;
import javafx.animation.PauseTransition;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.util.Duration;

public class CountDownController implements Initializable {

	@FXML
	private ResourceBundle resources;

	@FXML
	private URL location;

	@FXML
	private AnchorPane menuPane;

	@FXML
	private Text timerText;

	@FXML
	private Button resertButton, pauseButton, startButton;

	@FXML
	private AnchorPane timerPane;

	@FXML
	private ComboBox&lt;Integer&gt; schwellWertStunden1, schwellWertMinuten1, schwellWertStunden2, schwellWertMinuten2;

	@FXML
	private ComboBox&lt;Integer&gt; startStunden, startMinuten, startSekunden;

	private LocalTime localTimeCounter;
	private boolean bSchwellert1Erreicht;
	private PauseTransition pauseTransition;

	@FXML
	void start(ActionEvent event) {
		startCountDown();
		Combo();
	}

	void startCountDown() {

		try {
			localTimeCounter = LocalTime.of(startStunden.getSelectionModel().getSelectedIndex(),
					startMinuten.getSelectionModel().getSelectedIndex(),
					startSekunden.getSelectionModel().getSelectedIndex());

			LocalTime localTimeSchwellwert1 = LocalTime.of(schwellWertStunden1.getValue(),
					schwellWertMinuten1.getValue());
			LocalTime localTimeSchwellwert2 = LocalTime.of(schwellWertStunden2.getValue(),
					schwellWertMinuten2.getValue());

			bSchwellert1Erreicht = false;

			pauseTransition = new PauseTransition(Duration.seconds(.21));
			pauseTransition.setOnFinished(event -&gt;{

				localTimeCounter = localTimeCounter.minusSeconds(1);
				timerText.setText(localTimeCounter.toString());

				if (localTimeCounter.isBefore(localTimeSchwellwert1) &amp;&amp; !bSchwellert1Erreicht) {
					timerText.setFill(Color.ORANGE);
					bSchwellert1Erreicht = true;
				}

				if (localTimeCounter.isBefore(localTimeSchwellwert2)) {
					timerText.setFill(Color.RED);
				}

				if (localTimeCounter.toSecondOfDay() &lt;= 0) {
					pauseTransition.stop();
					return;
				}
				pauseTransition.play();
			});
			pauseTransition.play();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@FXML
	void pauseAction(ActionEvent event) {
		if(pauseTransition != null) {
			pauseTransition.stop();
		}
	}

	void siZe() {}

	void Combo() {
		if (schwellWertMinuten1.getSelectionModel().getSelectedIndex() &lt;= schwellWertMinuten2.getSelectionModel()
				.getSelectedIndex()) {
			Alert alert = new Alert(AlertType.ERROR);
			alert.setTitle(&quot;Bitte &#252;berpr&#252;fen sie denn Schwellwert 2!&quot;);
			alert.setHeaderText(&quot;Der Schwellwert 2 darf nicht kleiner oder gleich Schwellwert 1 sein!&quot;);
			alert.setContentText(&quot;&quot;);
			alert.showAndWait();
		}
	}

	@FXML
	void resetAction(ActionEvent event1) {
		if(pauseTransition != null) {
			pauseTransition.stop();
		}
		timerText.setText(&quot;00:00:00&quot;);
		timerText.setFill(Color.BLACK);
	}

	@Override
	public void initialize(URL location, ResourceBundle resources) {
		ObservableList&lt;Integer&gt; stundenListe = FXCollections.observableArrayList();
		ObservableList&lt;Integer&gt; minutenSekunden = FXCollections.observableArrayList();

		for (int i = 0; i &lt;= 60; i++) {
			if (0 &lt;= i &amp;&amp; i &lt;= 24) {
				stundenListe.add(i);
			}
			minutenSekunden.add(i);
		}
		startStunden.setItems(stundenListe);
		startStunden.setValue(0);
		schwellWertStunden1.setItems(stundenListe);
		schwellWertStunden1.setValue(0);
		schwellWertStunden2.setItems(stundenListe);
		schwellWertStunden2.setValue(0);
		startMinuten.setItems(minutenSekunden);
		startMinuten.setValue(0);

		schwellWertMinuten1.setItems(minutenSekunden);
		schwellWertMinuten2.setItems(minutenSekunden);
		schwellWertMinuten1.setValue(0);
		schwellWertMinuten2.setValue(0);
		startSekunden.setItems(minutenSekunden);
		startSekunden.setValue(0);
	}
}

Countdown.fxml:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

&lt;?import javafx.scene.control.Button?&gt;
&lt;?import javafx.scene.control.ComboBox?&gt;
&lt;?import javafx.scene.control.TabPane?&gt;
&lt;?import javafx.geometry.Insets?&gt;
&lt;?import javafx.scene.control.Tab?&gt;
&lt;?import javafx.scene.image.Image?&gt;
&lt;?import javafx.scene.image.ImageView?&gt;
&lt;?import javafx.scene.layout.AnchorPane?&gt;
&lt;?import javafx.scene.layout.VBox?&gt;
&lt;?import javafx.scene.text.Font?&gt;
&lt;?import javafx.scene.text.Text?&gt;

&lt;TabPane maxHeight=&quot;-Infinity&quot; maxWidth=&quot;-Infinity&quot; minHeight=&quot;-Infinity&quot; minWidth=&quot;-Infinity&quot; prefHeight=&quot;400.0&quot; prefWidth=&quot;600.0&quot; 
xmlns=&quot;http://javafx.com/javafx/8.0.171&quot; xmlns:fx=&quot;http://javafx.com/fxml/1&quot; fx:controller=&quot;gui.CountDownController&quot;&gt;
    &lt;tabs&gt;
        &lt;Tab closable=&quot;false&quot; text=&quot;Countdown&quot;&gt;
            &lt;content&gt;
                &lt;VBox alignment=&quot;CENTER&quot; spacing=&quot;20.0&quot; style=&quot;-fx-background-color: white&quot;&gt;
                    &lt;children&gt;
                        &lt;Text fx:id=&quot;timerText&quot; strokeType=&quot;OUTSIDE&quot; strokeWidth=&quot;0.0&quot; text=&quot;00:00:00 &quot; textOrigin=&quot;CENTER&quot; wrappingWidth=&quot;398.00001430511475&quot;&gt;
                            &lt;font&gt;
                                &lt;Font size=&quot;96.0&quot; /&gt;
                            &lt;/font&gt;
                        &lt;/Text&gt;
                        &lt;Button fx:id=&quot;pauseButton&quot; alignment=&quot;TOP_RIGHT&quot; onAction=&quot;#pauseAction&quot; prefHeight=&quot;100.0&quot; prefWidth=&quot;100.0&quot;&gt;
                            &lt;graphic&gt;
                                &lt;ImageView fitHeight=&quot;91.0&quot; fitWidth=&quot;109.0&quot; pickOnBounds=&quot;true&quot; preserveRatio=&quot;true&quot;&gt;
                                    &lt;image&gt;
                                        &lt;Image url=&quot;@../../../../../2000px-Gnome-media-playback-pause.svg.png&quot; /&gt;
                                    &lt;/image&gt;
                                &lt;/ImageView&gt;
                            &lt;/graphic&gt;
                        &lt;/Button&gt;
                        &lt;Button fx:id=&quot;resertButton&quot; alignment=&quot;TOP_RIGHT&quot; onAction=&quot;#resetAction&quot; prefHeight=&quot;100.0&quot; prefWidth=&quot;100.0&quot;&gt;
                            &lt;graphic&gt;
                                &lt;ImageView fitHeight=&quot;65.0&quot; fitWidth=&quot;109.0&quot; pickOnBounds=&quot;true&quot; preserveRatio=&quot;true&quot;&gt;
                                    &lt;image&gt;
                                        &lt;Image url=&quot;@../../../../../icon-1294478_960_720.png&quot; /&gt;
                                    &lt;/image&gt;
                                &lt;/ImageView&gt;
                            &lt;/graphic&gt;
                        &lt;/Button&gt;
                    &lt;/children&gt;
                &lt;/VBox&gt;
            &lt;/content&gt;
        &lt;/Tab&gt;
        &lt;Tab text=&quot;Werte&quot;&gt;
            &lt;content&gt;
                &lt;AnchorPane fx:id=&quot;timerPane&quot; minHeight=&quot;0.0&quot; minWidth=&quot;0.0&quot; prefHeight=&quot;200.0&quot; prefWidth=&quot;951.0&quot; style=&quot;-fx-background-color: white;&quot;&gt;
                    &lt;children&gt;
                        &lt;Text layoutX=&quot;170.0&quot; layoutY=&quot;110.0&quot; strokeType=&quot;OUTSIDE&quot; strokeWidth=&quot;0.0&quot; text=&quot;Startwert:&quot; wrappingWidth=&quot;127.21630859375&quot;&gt;
                            &lt;font&gt;
                                &lt;Font size=&quot;29.0&quot; /&gt;
                            &lt;/font&gt;
                        &lt;/Text&gt;
                        &lt;Text fill=&quot;#ffcd05&quot; layoutX=&quot;150.0&quot; layoutY=&quot;160.0&quot; strokeType=&quot;OUTSIDE&quot; strokeWidth=&quot;0.0&quot; text=&quot;  Schwellwert 1:&quot; wrappingWidth=&quot;198.41015625&quot;&gt;
                            &lt;font&gt;
                                &lt;Font size=&quot;29.0&quot; /&gt;
                            &lt;/font&gt;
                        &lt;/Text&gt;
                        &lt;Text fill=&quot;#e40505&quot; layoutX=&quot;150.0&quot; layoutY=&quot;210.0&quot; strokeType=&quot;OUTSIDE&quot; strokeWidth=&quot;0.0&quot; text=&quot;  Schwellwert 2:&quot;&gt;
                            &lt;font&gt;
                                &lt;Font size=&quot;29.0&quot; /&gt;
                            &lt;/font&gt;
                        &lt;/Text&gt;
                        &lt;ComboBox fx:id=&quot;startStunden&quot;  layoutX=&quot;350.0&quot; layoutY=&quot;79.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  std&quot; visible=&quot;false&quot; /&gt;
                        &lt;ComboBox fx:id=&quot;startMinuten&quot;  layoutX=&quot;350.0&quot; layoutY=&quot;80.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  min&quot; /&gt;
                        &lt;ComboBox fx:id=&quot;startSekunden&quot; disable=&quot;true&quot; prefHeight=&quot;25.0&quot; prefWidth=&quot;50.0&quot; promptText=&quot; sek&quot; visible=&quot;false&quot; /&gt;
                        &lt;Button fx:id=&quot;startButton&quot; layoutX=&quot;249.0&quot; layoutY=&quot;262.0&quot; onAction=&quot;#start&quot; prefHeight=&quot;100.0&quot; prefWidth=&quot;100.0&quot; text=&quot;Start&quot;&gt;
                            &lt;padding&gt;
                                &lt;Insets left=&quot;25.0&quot; right=&quot;25.0&quot; /&gt;
                            &lt;/padding&gt;
                            &lt;graphic&gt;
                                &lt;ImageView fitHeight=&quot;100.0&quot; fitWidth=&quot;100.0&quot; nodeOrientation=&quot;INHERIT&quot; pickOnBounds=&quot;true&quot; preserveRatio=&quot;true&quot;&gt;
                                    &lt;image&gt;
                                        &lt;Image url=&quot;@../../../../../play-97626_1280.png&quot; /&gt;
                                    &lt;/image&gt;
                                &lt;/ImageView&gt;
                            &lt;/graphic&gt;
                        &lt;/Button&gt;
                        &lt;ComboBox fx:id=&quot;schwellWertStunden1&quot;  layoutX=&quot;350.0&quot; layoutY=&quot;130.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  std&quot; visible=&quot;false&quot; /&gt;
                        &lt;ComboBox fx:id=&quot;schwellWertMinuten1&quot;  layoutX=&quot;350.0&quot; layoutY=&quot;131.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  min&quot; /&gt;
                        &lt;ComboBox fx:id=&quot;schwellWertStunden2&quot;  layoutX=&quot;350.0&quot; layoutY=&quot;180.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  std&quot; visible=&quot;false&quot; /&gt;
                        &lt;ComboBox fx:id=&quot;schwellWertMinuten2&quot;  layoutX=&quot;350.0&quot; layoutY=&quot;181.0&quot; prefHeight=&quot;35.0&quot; prefWidth=&quot;60.0&quot; promptText=&quot;  min&quot; /&gt;
                    &lt;/children&gt;
                &lt;/AnchorPane&gt;
            &lt;/content&gt;
        &lt;/Tab&gt;
    &lt;/tabs&gt;
&lt;/TabPane&gt;

huangapple
  • 本文由 发表于 2020年3月16日 18:52:18
  • 转载请务必保留本文链接:https://java.coder-hub.com/60704583.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定