2016-05-27 3 views
0

Я использую javaFX для создания приложения. У меня есть гиперссылку где-то и я установил (OnAction) для него, как показано нижеОтличить реальный щелчок мыши от метода огня

Hyperlink studentList = ...; // It's given proper object 
studentList.setOnAction(...); 

сейчас где-то я использовал этот метод, чтобы simluate щелчок на этой гиперссылке

studentList.fire(); 

теперь моя проблема заключается в том, как я могу отличить реальный метод click/keyPress от метода fire()?

ответ

1

Вот один из способов сделать это. Просто добавьте EventHandler в категорию setOnMousePressed. Не забудьте добавить его в setOnMousePressed, а не напр. setOnMouseClicked, так как setOnMousePressed вызывается перед вызовом fire(), в то время как setOnMouseClicked вызывается.

import javafx.application.Application; 
import javafx.beans.property.BooleanProperty; 
import javafx.beans.property.SimpleBooleanProperty; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Hyperlink; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class MCVE extends Application { 
    @Override 
    public void start(Stage stage) { 
     VBox content = new VBox(5); 
     content.setPadding(new Insets(10)); 

     Hyperlink link = new Hyperlink("Hyperlink"); 

     Button fireButton = new Button("Fire hyperlink"); 
     fireButton.setOnAction(e -> link.fire()); 

     BooleanProperty mouseClicked = new SimpleBooleanProperty(false); 

     link.setOnMousePressed(e -> { 
      System.out.println("Mouse click"); 
      mouseClicked.set(true); 
     }); 

     link.setOnAction(e -> { 
      if (!mouseClicked.get()) { 
       System.out.println("No mouse click"); 
      } 
      mouseClicked.set(false); 
     }); 

     content.getChildren().addAll(link, fireButton); 

     stage.setScene(new Scene(content)); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(); 
    } 
} 
Смежные вопросы