>

Java FX에서 쉬운 프로그램을 작성하고 있습니다. Java로 시작했습니다. 나는 만들고 싶다 텍스트 상자를 채우고 (시간 단위로) 실행합니다. 그리고 timer.schedule을 실행하는 것보다 매 분마다 레이블을 새로 고치도록 예약하십시오. 스톱워치 같은 것. (시간을 기억하고 싶은 시간을 설정합니다.)

컨트롤러가 있습니다

public class Controller implements Initializable  {
    @FXML
    public Label label;
    @FXML
   private TextField timeEnd;
    .
    .

및 onClick 방법

@FXML
private void handleButtonAction(ActionEvent event) {
    Integer timeEndVal = Integer.parseInt(timeEnd.getText());
    Date startDate = new Date();
    Date endDate = new Date();
    endDate.setTime(startDate.getTime() + (timeEndVal * 60000));
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            long currentMinutes = currentTime().getTime() - startDate.getTime();
            System.out.println(currentMinutes / 60000 + " / " + timeEndVal + " min");
            label.setText(String.valueOf(currentMinutes / 60000 + " / " + timeEndVal + " min"));

        }
    }, 0, 60000);

그러나 나는 label 를 얻는 방법을 모른다   timer.schedule 에 변수 . 내가 잘못한 것. 도와 주셔서 감사합니다.

  • 답변 # 1

    여기서 비 위즈 위즈입니다  아이디어를 얻는 데 사용할 수있는 버전입니다. 나는 당신이 Controller 를 사용하는 것이 좋습니다   TimeLine 대신 . 이것은 완전한 프로그램이 아닙니다!

    Timer
    
    
    import java.util.concurrent.atomic.AtomicInteger; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.util.Duration; /** * * @author blj0011 */ public class JavaFXApplication267 extends Application { @Override public void start(Stage primaryStage) { AtomicInteger timeInSeconds = new AtomicInteger(); TextField textField = new TextField(); Label label = new Label(Integer.toString(timeInSeconds.get())); Button btn = new Button("Play"); textField.setPromptText("Enter the number of minutes"); textField.textProperty().addListener((obs, oldValue, newValue) -> { //This assume the input is corret! timeInSeconds.set(Integer.parseInt(newValue) * 60);//Number of minutes times 60 seconds label.setText(getMinsSeconds(timeInSeconds.get())); }); Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), (event) -> { if (timeInSeconds.get() > 0) { label.setText(getMinsSeconds(timeInSeconds.decrementAndGet())); } })); timeline.setCycleCount(Timeline.INDEFINITE); btn.setOnAction((ActionEvent event) -> { switch (btn.getText()) { case "Play": timeline.play(); btn.setText("Pause"); textField.setEditable(false); break; case "Pause": timeline.pause(); btn.setText("Play"); textField.setEditable(true); break; } }); VBox root = new VBox(label, btn, textField); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene); primaryStage.show(); } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } String getMinsSeconds(int seconds) { return String.format("%02d:%02d", (seconds / 60), (seconds % 60)); } }

  • 이전 sql - 보고서에서 크로스 탭 사용
  • 다음 tfs2018 - TFS 2018에서 링크 된 작업 항목을 릴리스에 표시하려면 어떻게해야합니까?