【问题标题】:How to build a delete button to remove a character from the TextField every time delete button is clicked?每次单击删除按钮时,如何构建一个删除按钮以从 TextField 中删除一个字符?
【发布时间】:2015-01-14 19:07:26
【问题描述】:

JavaFX 文本字段

如何构建一个删除按钮(可以检测哪个TextField被激活)并在每次点击删除按钮时从TextField中删除一个字符?

(抱歉没说清楚,这里有更多解释) 我有三个 TextField(如下所示),当光标位于 tf1 处的 TextField 之一时,当我单击 btnDelete 按钮时,可以从 ft1 中删除一个字符(btnDelete 按钮的工作方式应与从计算机键盘中删除的方式相同)。

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

@FXML
public void btnDelete(ActionEvent actionEvent) {

}

【问题讨论】:

  • TextField 中的哪一个被激活”是什么意思?你能发布一些代码来展示你是如何设置的,以及你尝试了什么?
  • 我认为他有例如 3 个文本字段和一个删除按钮。他的问题可能是按下 Button 时上次编辑的 TextField 失去焦点。所以他寻找一种方法来存储最后一个聚焦的 TextField 并从那一端删除 Char?现有代码会有所帮助:) 正如 James_D 所说
  • 感谢 James_D 和 Inge,我已经添加了更多解释。
  • 请注意,这个网站不是用来做你的功课的 ;-) 那 sn-p 显然什么也没做,那怎么可能有问题呢?从一个字段开始,让处理程序做一些事情(比如 f.i. 写出一个字符串)然后学习如何通过一个按钮删除字段中的一个字符,然后将该代码放入处理程序中。然后添加其他两个文本字段并找出如何将删除定位到其中任何一个。在此过程中,返回一个展示具体问题的 SSCCE(如果您还有任何问题:-)
  • 感谢您的帮助 kleopatra,focusedProperty 正是我所需要的,我应该以更好的方式发布我的问题。

标签: java javafx textfield javafx-8


【解决方案1】:

解决您的问题的方法是使用focusedProperty 保存, 当 newValue 为 true 时,在通用 TextField txt 上,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;
            }
        }
    });
}

【讨论】:

  • 非常感谢Mailkov!
  • focusedProperty 正是我所需要的 :)
【解决方案2】:
textfield.setText(textfield.getText(0, textfield.getLength()-1));

【讨论】:

  • 请解释一下上面提到的代码在做什么。这对所有正在寻找答案的人都会有所帮助。
  • 此答案中的代码删除了 TextField(命名为 textfield)的最后一个字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多