我目前正在尝试构建一个行为类似于命令shell的应用程序。我想显示我给它的路径(或'
我这样做是为了在用户提交文本时文本字段会被清空。提交后,它将字段的文本设置为我的路径,以达到类似的效果,但用户仍然可以在输入文本时删除该路径。
如何使我的路径文本显示在字段中,但用户无法删除它?
我已经尝试过这个,但它只在提交后更新插入符号位置:
textField.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
textField.positionCaret(textField.getLength());
}
});
您可以使用文本格式化程序
筛选出对文本字段的无效操作。文本格式化程序
有一个过滤器,用于过滤对文本字段的更改;您可以通过让过滤器返回 null
来否决任何更改。对于您描述的内容,最简单的实现只需过滤掉文本字段的插入记号位置或锚点在固定文本结束之前的任何更改:
UnaryOperator<TextFormatter.Change> filter = c -> {
if (c.getCaretPosition() < prefix.length() || c.getAnchor() < prefix.length()) {
return null ;
} else {
return c ;
}
};
textField.setTextFormatter(new TextFormatter<String>(filter));
您可以在此处尝试其他逻辑(例如,如果您希望用户能够选择固定文本)。
这是一个SSCCE:
import java.util.function.UnaryOperator;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class TextFieldFixedPrefix extends Application {
private TextField createFixedPrefixTextField(String prefix) {
TextField textField = new TextField(prefix);
UnaryOperator<TextFormatter.Change> filter = c -> {
if (c.getCaretPosition() < prefix.length() || c.getAnchor() < prefix.length()) {
return null ;
} else {
return c ;
}
};
textField.setTextFormatter(new TextFormatter<String>(filter));
textField.positionCaret(prefix.length());
return textField ;
}
@Override
public void start(Stage primaryStage) {
TextField textField = createFixedPrefixTextField("/home/currentUser $ ");
StackPane root = new StackPane(textField);
Scene scene = new Scene(root, 300,40);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
问题内容: 我正在使用JavaFX和Scene Builder,并且有一个带有文本字段的表单。这些文本字段中的三个从字符串解析为双精度。 我希望它们是学校成绩,因此只能将其设置为1.0到6.0之间。不应允许用户写“ 2.34.4”之类的内容,但可以写“ 5.5”或“ 2.9”之类的内容。 验证已解析字段: 如何测试用户输入的值是否正确? 我已经在Stackoverflow和Google上进行了搜索
我使用的是javafx文本字段。我需要输入与格式##########匹配的数字和小数### 小数不可编辑,数字可以是任意数字;不允许其他输入。并非所有数字占位符都需要填写,例如,它可能是1.2或2.22.1,甚至是1.222.222.0 我尝试使用模式匹配与正则表达式来验证更改的文本,但仅此而已;它验证输入,它不会使十进制字段成为不可编辑的字段,并且工具提示不是一个选项。我不确定还能尝试什么。 我
问题内容: 当我在文本字段中输入文本时,它将被删除。 这是代码: 问题答案: 同意Subir Kumar Sao和Faiz。
当我在文本字段中输入文本时,它会被删除。 代码如下:
问题内容: 在我的测试中,我有一个带有预先存在的文本的文本字段。我想删除内容并输入新字符串。 用硬件键盘删除字符串时,录音对我来说什么都没有产生。用软件键盘做完同样的事情后,我得到了: 要么 我担心自己的测试取决于语言,因此我为受支持的语言创建了以下内容: 在代码中看起来更好: 但是非常脆弱。从模拟器退出后,被重置,并且我的测试失败。我的解决方案不适用于CI测试。如何解决这个问题才更普遍? 问题答
在我的公司,我们的任务是实现一个可自动扩展的文本字段。由于默认情况下不提供此功能,我们必须从头开始开发它。web上有许多可能性,如何实现它,但没有人为as工作,所以我们决定将代码放在so上,以便其他开发人员也可以使用它。由于无法展开文本字段,因此解决方案基于文本区域: 我希望它能帮助你:)