onAction for javafx中的textfield

时间:2017-03-16 07:55:14

标签: javafx textfield

我的代码中有JavaFX TextField,并希望在TextField上的不同事件中添加一个动作。

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.event.EventType;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.Tooltip;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;    
import javafx.scene.text.Font;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import java.io.File;
import javafx.beans.value.ChangeListener;

/* Input from user */
    weightTF = new TextField(); 
    weightTF.setMaxWidth(36);
    activeInsulinTF = new TextField();
    activeInsulinTF.setMaxWidth(36);
    VBox inputBox = new VBox();
    inputBox.setFillWidth(false);
    inputBox.setAlignment(Pos.CENTER);
    inputBox.getChildren().add(weightTF);
    inputBox.getChildren().add(activeInsulinTF);
    inputBox.setSpacing(8);
    // Add onAction for the texfields
    menuHBox.getChildren().add(inputBox);
        weightTF.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent e) {
            double weight = Double.parseDouble(weightTF.getText());
            Main.state.setWeight(weight);
            System.out.println("Entered weight: " + weight);
        }
    });

今天,当我在TextField中写入一些文字后按Enter键时,我才会收到操作。如何添加处理标签按下的操作?另外,当TextField通过鼠标单击失去焦点时如何做出反应?

当我阅读文档时,它应该是可能的: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TextField.html

希望有人可以帮助我:)。

2 个答案:

答案 0 :(得分:1)

有几种方便的方法可以做到这一点,例如

weightTF.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
       // do stuff
    }
});

只要在TextField中按下某个键,就会执行此操作。您可能想要检查按下的键是否是特定键。这可以通过

来实现
if(event.getCode() == KeyCode.TAB){
    // do stuff
}
例如,

。如果您使用的是NetBeans或其他IDE,则可以在键入“weightTF。”后按自动完成快捷方式查看便捷方法,该快捷方式将显示所有可用方法。我正在谈论的方法从setOn开始...... 希望有所帮助:)

答案 1 :(得分:1)

从您的问题中听起来好像您真的有兴趣了解用户何时将焦点从文本字段移动到另一个控件。如果用户按下 Tab ,或者在另一个控件上单击鼠标,这通常会发生,但从技术上讲,此行为与平台有关。它也可以通过编程方式发生。

使用&#34;低级&#34;的问题事件处理程序是(1)理论上你必须用所有其他控件注册一个鼠标监听器; (2)您依赖于在所有平台上使用相同的击键进行焦点遍历; (3)如果你要添加需要编程焦点遍历的功能(即你的代码如someOtherControl.requestFocus()),你的事件监听器将不会被通知。

如果文本字段失去焦点,那么可靠的回应方式就是注册一个带有focusedProperty()的监听器:

weightTF.focusedProperty().addListener((obs, wasFocused, isNowFocused) -> {
    if (! isNowFocused) {
        // text field has lost focus...
        System.out.println(weightTF.getText());
    }
});

另请注意,Scene具有focusOwnerProperty,它具有类似的可观察性,并且包含对当前具有焦点的场景中的节点的引用。您可以使用此属性来代替处理移动焦点远离任何文本字段的更一般的侦听器。