JavaFx Buttonダブルクリック

2462 ワード

最近カレンダーを書く授業では、複数のボタンをダブルクリックとクリックを区別して、異なるイベントに応答する必要があります.Buttonには既存のダブルクリック方法がありません.e.getClickCount()がありますが、明らかに私たちのニーズを満たしていません.その後、ネット上で以下のブログを見てリンクを開き、テストを経て、インタフェースに少なくとも2つのボタンが同じMyMouseListenerオブジェクトに登録されている場合、手が速く、ButtonAをクリックした後、すぐにButtonBをクリックすると、ButtonBダブルクリックのエラーが発生します. 
このブログの実現構想と結びつけて、「最初にマウスをクリックしたときにdelay秒をクリックして実行させ、この間に2回目のクリックを待つことを考慮し、2回目のクリックがあれば、イベントタスクをダブルクリックして、タスクをキャンセルします.この時間に再びクリックするまで待たなければ、クリックタスクを実行します.」と、JavaFxのButtonクリックダブルクリックを実現しました.具体的なコードは以下の通りです.
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JButton;

import javafx.application.*;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;

public class Test3 extends Application {
	
	@Override
	public void start(Stage primaryStage) throws Exception {

		Button bt1 = new Button("bt1");
		Button bt2 = new Button("bt2");
		
		bt1.setOnAction(new A());
		bt1.setId("0");
		
		bt2.setOnAction(new A());
		bt2.setId("0");

		Pane pane = new HBox();
		pane.getChildren().addAll(bt1, bt2);
		Scene scene = new Scene(pane, 300, 400);
		primaryStage.setScene(scene);
		primaryStage.show();
	}
	
	public static void main(String[] args) {
		launch();
	}
	
	
	// 
	class A implements EventHandler{
		private int delay = 300;    //  300ms
		@Override
		public void handle(ActionEvent event) {
			// TODO Auto-generated method stub
			Button bt = (Button)(event.getSource());
			int count = Integer.parseInt(bt.getId())+1;
			bt.setId(count + "");
			//System.out.println(count);
			if(count%2 == 1) {
				Timer timer = new Timer();
				timer.schedule(new TimerTask() {

					@Override
					public void run() {
						// TODO Auto-generated method stub
						if(Integer.parseInt(bt.getId()) == count) {
							mouseSingleClicked(event);
							bt.setId("0");
						}
					}
					
				}, delay);
			}else {
				mouseDoubleClicked(event);
				bt.setId("0");
			}
			
		}
		
		public void mouseSingleClicked(ActionEvent e) {
			System.out.println(" ");
		}

	
		public void mouseDoubleClicked(ActionEvent e) {
			System.out.println(" ");
		}
		
	}
}