Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将操作事件处理程序添加到文本字段java fx_Java_Javafx - Fatal编程技术网

将操作事件处理程序添加到文本字段java fx

将操作事件处理程序添加到文本字段java fx,java,javafx,Java,Javafx,我在java fx代码中有一个Textfield节点: TextField Name= new TextField(); 我了解如果单击按钮,如何通过添加事件处理程序触发代码,如下所示: Button getName= new Button("Save"); getName.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent args) { System.o

我在java fx代码中有一个Textfield节点:

TextField Name= new TextField();
我了解如果单击按钮,如何通过添加事件处理程序触发代码,如下所示:

Button getName= new Button("Save");

getName.setOnAction(new EventHandler<ActionEvent>() {
    public void handle(ActionEvent args) {
       System.out.println("You clicked me!"):
    }
});
Button getName=新建按钮(“保存”);
getName.setOnAction(新的EventHandler(){
公共无效句柄(ActionEvent参数){
System.out.println(“你点击了我!”):
}
});
我是否可以将相同的代码添加到我的textField节点,这样当单击文本字段时,它就会触发一堆代码?或者你是如何做到这一点的?

试试这个:

TextField yourTextField = new TextField();
yourTextField.focusedProperty().addListener(new ChangeListener<Boolean>()
{
    @Override
    public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue)
    {
        if (newPropertyValue)
        {
            System.out.println("Textfield on focus");
        }
        else
        {
            System.out.println("Textfield out focus");
        }
    }
});
TextField yourTextField=newtextfield();
yourTextField.focusedProperty().addListener(新的ChangeListener())
{
@凌驾

public void已更改(observeValue要响应鼠标单击,请使用


与仅供参考一样,可以为TextField指定“操作处理程序”,通常在用户键入ENTER键时调用这似乎不是您真正想要的。因此您可以为单击指定它?不,这不是文本字段的
onAction
工作方式,因为文本字段
onAction
是由回车键触发的,而不是单击。如果您想捕获单击(或触摸)事件,您将需要一个事件筛选器,sry我现在没有时间编写解决方案。好的,谢谢,很高兴继续阅读。这响应文本字段获得焦点,而不是鼠标单击。因此,例如,如果用户使用tab键将焦点放在文本字段上(但从未使用鼠标),您的处理程序将被触发。另一方面,如果文本字段已经有焦点,并且用户单击了它,则不会触发处理程序。我如何将单击事件添加到文本字段中,真正查找itI?我认为文本字段将使用鼠标单击事件,并且不会再次冒泡到onMouseClicked处理程序,因此您需要一个筛选器…bu我想错了:-)控件何时使用事件和何时不使用事件似乎不太一致。IIRC文本控件使用按键事件,但似乎不使用鼠标事件。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class ClickOnTextField extends Application {

    @Override
    public void start(Stage primaryStage) {
        TextField textField = new TextField();
        textField.setOnMouseClicked(e -> {
            System.out.println("Clicked");
        });

        StackPane root = new StackPane(textField);
        Scene scene = new Scene(root, 350, 120);
        primaryStage.setScene(scene);;
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}