【问题标题】:Add action event handler to text field java fx将动作事件处理程序添加到文本字段 java fx
【发布时间】:2016-01-12 19:26:14
【问题描述】:

我的 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!"):
    }
});

我能否将相同的代码添加到我的 textField 节点,这样当点击文本字段时,它会触发一堆代码?或者你是怎么做到的?

【问题讨论】:

  • 仅供参考,可以为 TextField 指定 onAction event handler。 “当用户键入 ENTER 键时,通常会调用操作处理程序。”这似乎不是您实际要求的。
  • 所以你可以指定它来点击?
  • 不,这不是 onAction 用于 TextField 的方式,因为 TextField onAction 由 ENTER 键触发,而不是单击。如果您想捕获点击(或触摸)事件,您将需要一个事件过滤器,抱歉,我现在没有时间编写解决方案。
  • 好的,但是谢谢,很高兴知道

标签: java javafx


【解决方案1】:

要响应鼠标点击,请使用setOnMouseClicked

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);
    }
}

【讨论】:

  • 我认为 TextField 会消耗鼠标单击事件,并且不会再次冒泡到 onMouseClicked 处理程序,因此您需要一个 filter 。 . .但我想错了:-)
  • 控件何时使用事件以及何时不使用似乎没有太大的一致性。 IIRC 文本控件消耗按键事件,但似乎它们不消耗鼠标事件。
【解决方案2】:

试试这个:

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");
        }
    }
});

【讨论】:

  • 响应文本字段获得焦点,而不是鼠标点击它。因此,例如,如果用户使用 tab 键将焦点放在文本字段上(但根本不使用鼠标),您的处理程序将被触发。另一方面,如果文本字段已经获得焦点,并且用户单击它,则不会触发您的处理程序。
  • 如何将点击事件添加到文本字段,真的在找它
猜你喜欢
  • 1970-01-01
  • 2021-02-26
  • 2018-08-24
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
相关资源
最近更新 更多