javafx写一个时钟程序,怎么才能让它动起来,有开始暂停按钮

进击的zmj 2014-12-14 12:13:18
我写的只能按一次动一次,我是新手,多线程什么的根本不会用啊。。。
下面是我写的代码

import java.util.*;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.text.Text;
import javafx.stage.Stage;


public class 时钟 extends Application{
public void start(final Stage primaryStage) {
class btStartHandlerClass implements EventHandler<ActionEvent> {
public void handle(ActionEvent e) {
System.out.println("Start button clicked");
Calendar c = Calendar.getInstance();
x1=c.get(Calendar.SECOND);
x2=c.get(Calendar.MINUTE);
x3=c.get(Calendar.HOUR)*5;
start(primaryStage);
}
}
class btStopHandlerClass implements EventHandler<ActionEvent>{
public void handle(ActionEvent e) {
System.out.println("Stop button clicked");
x1=3;x2=39.5;x3=3.2;
start(primaryStage);
}
}
Pane pane = new Pane();
Button btStart = new Button("Start");
btStart.setLayoutX(410);
btStart.setLayoutY(520);
btStart.setPrefSize(80, 40);
Button btStop = new Button("Stop");
btStop.setLayoutX(310);
btStop.setLayoutY(520);
btStop.setPrefSize(80, 40);
btStartHandlerClass handler1=new btStartHandlerClass();
btStopHandlerClass handler2=new btStopHandlerClass();
btStart.setOnAction(handler1);
btStop.setOnAction(handler2);
pane.getChildren().add(btStart);
pane.getChildren().add(btStop);

Circle circle = new Circle(400,300,200, Color.web("white", 0));//建立圆形,边长为200,白色,透明度为0
circle.setStroke(Color.web("black", 1));//给园边框
pane.getChildren().add(circle);

for (int i = 0; i < 60; i++) {//短的表盘指针
Line line = new Line(400+200*Math.sin(Math.PI*i/30),(300-200*Math.cos(Math.PI*i/30)),400+190*Math.sin(Math.PI*i/30),(300-190*Math.cos(Math.PI*i/30)));
pane.getChildren().add(line);
}
for (int i = 0,j = 0; i < 60; i=i+5,j++) {//长的表盘指针和 表盘数字
String[] n={"12","1","2","3","4","5","6","7","8","9","10","11"};
Line line = new Line(400+200*Math.sin(Math.PI*i/30),(300-200*Math.cos(Math.PI*i/30)),400+180*Math.sin(Math.PI*i/30),(300-180*Math.cos(Math.PI*i/30)));
pane.getChildren().add(line);
Text text = new Text(395+170*Math.sin(Math.PI*i/30),(300-170*Math.cos(Math.PI*i/30)),n[j]);
pane.getChildren().add(text);
}

Line line3 = new Line(400,300,400+160*Math.sin(Math.PI*x1/30),(300-160*Math.cos(Math.PI*x1/30)));
pane.getChildren().add(line3);//秒针
line3.setStroke(Color.RED);
Line line2 = new Line(400,300,400+120*Math.sin(Math.PI*x2/30),(300-120*Math.cos(Math.PI*x2/30)));
pane.getChildren().add(line2);//分针
line2.setStroke(Color.BLUE);
Line line1 = new Line(400,300,400+80*Math.sin(Math.PI*x3/30),(300-80*Math.cos(Math.PI*x3/30)));
pane.getChildren().add(line1);//时针
line1.setStroke(Color.GREEN);

Scene scene = new Scene(pane, 800, 600);
primaryStage.setTitle("Myclock"); //设置stage标题
primaryStage.setScene(scene); // 把scene放入stage中
primaryStage.show();
}
double x1=3,x2=39.5,x3=3.2;
public static void main(String[] args) {
System.out.println("launch application");
launch(args);
}
}
...全文
485 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
进击的zmj 2014-12-14
  • 打赏
  • 举报
回复
我想在这里加一个循环但是程序按钮会未响应,加上每一秒执行一次的代码也是一样未响应 class btStartHandlerClass implements EventHandler<ActionEvent> { public void handle(ActionEvent e) { System.out.println("Start button clicked"); while(true){ Calendar c = Calendar.getInstance(); x1=c.get(Calendar.SECOND); x2=c.get(Calendar.MINUTE); x3=c.get(Calendar.HOUR)*5; start(primaryStage); } } }

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧