防止退格键删除 javafx textarea 中的字符
preventing the backspace key from deleting characters in a javafx textarea
我正在尝试防止退格键删除 javafx 文本区域中的字符。 KeyEvent.consume
应该这样做,但它不会阻止关键事件的发生。它确实设置了键事件的 属性 并且 KeyEvent.isConsumed()
在使用该事件后返回 true。退格键仍然被执行。我试过其他键也有同样的效果
这是我当前的 fxcontroller class:
public class Terminal {
@FXML
private TextArea ta_console;
@FXML
private AnchorPane ap_main;
@FXML
protected void initialize(){
ta_console.setText(">");
ta_console.positionCaret(1);
}
public void keyStroke(KeyEvent keyEvent) {
if (keyEvent.getCode() == KeyCode.BACK_SPACE || keyEvent.getCode() == KeyCode.DELETE) {
keyEvent.consume();
}
}
}
keyStroke
方法在按下按键时由文本区域执行。
我是不是遗漏了什么,或者 consume
有问题,或者以某种方式无法按照文档所说的方式运行?有什么办法我仍然可以得到想要的结果吗?
如果你想防止用户删除文本,那应该用 TextFormatter
来完成,而不是试图猜测控件在内部处理哪些关键事件,以及所有这些事件的处理顺序,等等等等,因为它的默认行为。
不清楚您想要实现什么,但这里有一个示例,可以防止删除(或替换)文本:
public class Terminal {
@FXML
private TextArea taConsole;
@FXML
protected void initialize(){
taConsole.setText(">");
taConsole.positionCaret(1);
taConsole.setTextFormatter(new TextFormatter(change -> {
if (change.getRangeStart() == change.getRangeEnd()) { // nothing deleted
return change ;
}
// change represents a deletion of some text, veto it:
return null ;
});
}
}
我正在尝试防止退格键删除 javafx 文本区域中的字符。 KeyEvent.consume
应该这样做,但它不会阻止关键事件的发生。它确实设置了键事件的 属性 并且 KeyEvent.isConsumed()
在使用该事件后返回 true。退格键仍然被执行。我试过其他键也有同样的效果
这是我当前的 fxcontroller class:
public class Terminal {
@FXML
private TextArea ta_console;
@FXML
private AnchorPane ap_main;
@FXML
protected void initialize(){
ta_console.setText(">");
ta_console.positionCaret(1);
}
public void keyStroke(KeyEvent keyEvent) {
if (keyEvent.getCode() == KeyCode.BACK_SPACE || keyEvent.getCode() == KeyCode.DELETE) {
keyEvent.consume();
}
}
}
keyStroke
方法在按下按键时由文本区域执行。
我是不是遗漏了什么,或者 consume
有问题,或者以某种方式无法按照文档所说的方式运行?有什么办法我仍然可以得到想要的结果吗?
如果你想防止用户删除文本,那应该用 TextFormatter
来完成,而不是试图猜测控件在内部处理哪些关键事件,以及所有这些事件的处理顺序,等等等等,因为它的默认行为。
不清楚您想要实现什么,但这里有一个示例,可以防止删除(或替换)文本:
public class Terminal {
@FXML
private TextArea taConsole;
@FXML
protected void initialize(){
taConsole.setText(">");
taConsole.positionCaret(1);
taConsole.setTextFormatter(new TextFormatter(change -> {
if (change.getRangeStart() == change.getRangeEnd()) { // nothing deleted
return change ;
}
// change represents a deletion of some text, veto it:
return null ;
});
}
}