Java 如何构建删除按钮以在每次单击删除按钮时从文本字段中删除字符?

Java 如何构建删除按钮以在每次单击删除按钮时从文本字段中删除字符?,java,javafx,textfield,javafx-8,Java,Javafx,Textfield,Javafx 8,JavaFX文本字段 如何构建删除按钮(可以检测哪个文本字段处于活动状态)并在每次单击删除按钮时从文本字段中删除字符 (对不起,不清楚,这里有更多解释) 我有三个文本字段(如下所示),当光标位于其中一个文本字段时,比如在tf1,当我单击btnDelete按钮时,可以从ft1中删除一个字符(btnDelete按钮的工作方式应与从计算机键盘中删除相同) 解决问题的方法是使用focusedProperty保存, 当newValue为true时,在通用文本字段txt上,文本字段聚焦。。。 查看此示例代码

JavaFX文本字段

如何构建删除按钮(可以检测哪个文本字段处于活动状态)并在每次单击删除按钮时从文本字段中删除字符

(对不起,不清楚,这里有更多解释) 我有三个文本字段(如下所示),当光标位于其中一个文本字段时,比如在tf1,当我单击btnDelete按钮时,可以从ft1中删除一个字符(btnDelete按钮的工作方式应与从计算机键盘中删除相同)


解决问题的方法是使用focusedProperty保存, 当newValue为true时,在通用文本字段txt上,文本字段聚焦。。。 查看此示例代码:

@FXML
TextField tf1;
@FXML
TextField tf2;
@FXML
TextField tf3;

TextField txt;

@FXML
public void btnDelete(ActionEvent actionEvent) {
    txt.setText( txt.getText().substring(0, txt.getText().length()-1));
}

@Override
public void initialize(URL url, ResourceBundle rb) {   

    tf1.focusedProperty().addListener(new ChangeListener<Boolean>() {
        @Override
        public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
            if (newValue){
                txt=tf1;
            }
        }
    });

    tf2.focusedProperty().addListener(new ChangeListener<Boolean>() {
        @Override
        public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
            if (newValue){
                txt=tf2;
            }
        }
    });

    tf3.focusedProperty().addListener(new ChangeListener<Boolean>() {
        @Override
        public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
            if (newValue){
                txt=tf3;
            }
        }
    });
}
@FXML
文本字段tf1;
@FXML
TextField tf2;
@FXML
文本字段tf3;
文本字段txt;
@FXML
公共作废btnDelete(ActionEvent ActionEvent){
setText(txt.getText().substring(0,txt.getText().length()-1));
}
@凌驾
公共无效初始化(URL,ResourceBundle rb){
tf1.focusedProperty().addListener(新的ChangeListener()){
@凌驾

public void changed(observeValue)您所说的“激活了
文本字段中的哪一个”是什么意思?你能发布一些代码来展示你是如何设置的,以及你尝试了什么吗?我想他有3个文本字段和一个删除按钮。他的问题可能是当按下按钮时,上次编辑的文本字段失去了焦点。所以他想找一种方法来存储最后一个焦点文本字段并从该端删除字符?现有的代码会有所帮助:)正如James_D所说的Hanks James_D和Inge,我添加了更多的解释。请注意,这个网站不是用来做家庭作业的;-)这个片段显然没有任何作用,那么怎么会有问题呢?从一个字段开始,让处理程序做一些事情(比如f.I.写出一个字符串)然后学习如何通过按钮删除字段中的字符,然后将该代码放入处理程序。然后添加其他两个文本字段,并了解如何将删除目标指向其中任何一个字段。在此过程中,返回一个SSCCE,它演示了一个具体问题(您是否仍有任何问题:-)谢谢你的帮助kleopatra,focusedProperty正是我所需要的,我应该以更好的方式发布我的问题。非常感谢Mailkov!focusedProperty正是我所需要的:)请解释上面提到的代码正在做什么。这将对每个正在寻找答案的人都有帮助。此答案中的代码删除了最后一个字符TextField(命名为TextField)的名称
@FXML
TextField tf1;
@FXML
TextField tf2;
@FXML
TextField tf3;

TextField txt;

@FXML
public void btnDelete(ActionEvent actionEvent) {
    txt.setText( txt.getText().substring(0, txt.getText().length()-1));
}

@Override
public void initialize(URL url, ResourceBundle rb) {   

    tf1.focusedProperty().addListener(new ChangeListener<Boolean>() {
        @Override
        public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
            if (newValue){
                txt=tf1;
            }
        }
    });

    tf2.focusedProperty().addListener(new ChangeListener<Boolean>() {
        @Override
        public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
            if (newValue){
                txt=tf2;
            }
        }
    });

    tf3.focusedProperty().addListener(new ChangeListener<Boolean>() {
        @Override
        public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
            if (newValue){
                txt=tf3;
            }
        }
    });
}
textfield.setText(textfield.getText(0, textfield.getLength()-1));