java - JavaFx TextArea 中的改写模式:如何启用
问题描述
我的应用程序需要一个文本编辑区域,其中需要文本输入的“改写”模式。这是在某些文本输入应用程序中通过切换键盘上的“插入”键触发的那种行为。在文本输入的“改写”模式中,用户键入的字符会替换现有字符(如果有),而不是将它们推到左侧。
如何在 JavaFX TextArea 中启用它?
解决方案
以下是基于 James_D 评论的示例:
public class Main extends Application {
UnaryOperator<TextFormatter.Change> changeFilter = c -> {
if (c.isAdded()) {
int len = c.getText().length();
c.setRange(c.getRangeStart(), Math.min(c.getControlText().length(), c.getRangeStart()+len));
}
return c;
};
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
TextArea textArea = new TextArea("Type over this text.");
textArea.setTextFormatter(new TextFormatter<>(changeFilter));
textArea.setFont(Font.font("Monospaced"));
Scene scene = new Scene(textArea);
stage.setTitle("TypeOver");
stage.setScene(scene);
stage.setMinWidth(400);
stage.show();
}
}
推荐阅读
- android - TextView 中的白屏
- rust - 使用 Diesel 的 `belongs_to` 属性时“使用未声明的类型或模块”
- python - run.font.italic 和 run.font.bold 返回 None 而不是 True
- java - Java:如何不仅按名称,而且按大小和内容搜索文件夹中的重复文件?
- c++ - 如何自动创建字符串的编译时容器
- git - Azure DevOps - 我应该将代码从源合并到我的分支并提交吗?
- vue.js - 构建生产后,Vue路由器无法正常工作
- flutter - 我使用堆栈封装的 3 个容器来获得类似这样的布局,现在我想让页面滚动?
- html - 如何将 2 个 div 彼此相邻放置
- python - 合并和组合 2 列不同的数据框