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