默认行为是字段中的提示文本在字段被聚焦时被擦除。这是当标记在字段中时。
是否可以配置文本字段,以便仅在用户开始键入时删除提示文本?
否则,我需要在每个文本字段旁边/上方添加一个标签,以描述其中的值。
您可以配置“-fx prompt text fill”键。文本字段:聚焦“类区域输入”。“文本字段”区域(css):
`.text-field {
-fx-prompt-text-fill: derive(-fx-control-inner-background,-30%);
}
.text-field:focused {
-fx-prompt-text-fill: derive(-fx-control-inner-background,-30%);
}`
并在fxml文件中添加“PrompText”条目:
<TextField fx:id="XY_Id" promptText="First name">
这就是全部,对我来说很有用。
我知道它有点旧,但我自己也需要它,这仍然非常相关
我将完成jewelsea的回答,并给出一个更简单的解决方案。
显然,这是Java(FX)的默认行为(只有当用户开始输入时,TextField中的提示文本才会被清除)。
但是,在JIRA系统中收到请求(或错误报告)后,
Java改变了这种行为(并默认在TextField获得焦点时清除文本)。
您可以在此处查看此错误报告。
要回到旧的默认值(和更好的行为IMO),您需要做的就是添加以下代码行。
如果您的应用程序接口是使用适当的Java代码编写的。
Java代码:
textField.setStyle("-fx-prompt-text-fill: derive(-fx-control-inner-background, -30%);");
其中,文本字段是您的文本字段组件。
如果您的应用程序界面是使用FXML和CSS编写的,请将以下内容添加到CSS文件中。
JavaFX FXML(CSS):
.text-input, .text-input:focused {
-fx-prompt-text-fill: derive(-fx-control-inner-background, -30%);
}
目前这是默认行为(文本字段获得焦点时,文本字段的提示文本被清除),因此无需html" target="_blank">执行任何操作即可获得此行为,
但如果Java决定返回到键入时清除的行为,并且您希望获得焦点时清除的行为,则以下方法:
对于正确的Java代码,这有点棘手,因为您不能直接定义伪类的行为。
Java代码(使用绑定):
textField.styleProperty().bind(
Bindings
.when(textField.focusedProperty())
.then("-fx-prompt-text-fill: transparent;")
.otherwise("-fx-prompt-text-fill: derive(-fx-control-inner-background, -30%);"));
或-
Java代码(使用事件):
textField.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if (newValue) {
textField.setStyle("-fx-prompt-text-fill: transparent;");
} else {
textField.setStyle("-fx-prompt-text-fill: derive(-fx-control-inner-background, -30%);");
}
}
});
JavaFX FXML CSS:
将以下内容添加到CSS文件中。
.text-input {
-fx-prompt-text-fill: derive(-fx-control-inner-background, -30%);
}
.text-input:focused {
-fx-prompt-text-fill: transparent;
}
希望这有助于...
解决方案
此示例将允许JavaFX中的TextFields,其提示行为是在字段为空时显示提示,即使字段具有焦点。该解决方案是自定义CSS和自定义TextField类的组合,后者处理TextField的CSS样式。
persistent-prompt.css
.persistent-prompt:focused {
-fx-prompt-text-fill: derive(-fx-control-inner-background,-30%);
}
.no-prompt {
-fx-prompt-text-fill: transparent !important;
}
PersistentPrompTextField。Java语言
import javafx.scene.control.TextField;
public class PersistentPromptTextField extends TextField {
PersistentPromptTextField(String text, String prompt) {
super(text);
setPromptText(prompt);
getStyleClass().add("persistent-prompt");
refreshPromptVisibility();
textProperty().addListener(observable -> refreshPromptVisibility());
}
private void refreshPromptVisibility() {
final String text = getText();
if (isEmptyString(text)) {
getStyleClass().remove("no-prompt");
} else {
if (!getStyleClass().contains("no-prompt")) {
getStyleClass().add("no-prompt");
}
}
}
private boolean isEmptyString(String text) {
return text == null || text.isEmpty();
}
}
提示转换器。Java语言
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class PromptChanger extends Application {
@Override
public void start(Stage stage) throws Exception {
TextField textField1 = new PersistentPromptTextField("", "First name");
TextField textField2 = new PersistentPromptTextField("", "Last name");
VBox layout = new VBox(
10,
textField1,
textField2
);
layout.setPadding(new Insets(10));
Scene scene = new Scene(layout);
scene.getStylesheets().add(
getClass().getResource(
"persistent-prompt.css"
).toExternalForm()
);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}
JavaFX 8中当前如何实现提示处理
JavaFX 8(modena.CSS)用于控制提示文本的默认CSS如下所示:
.text-input {
-fx-prompt-text-fill: derive(-fx-control-inner-background,-30%);
}
.text-input:focused {
-fx-prompt-text-fill: transparent;
}
这将使提示文本在聚焦某个字段时透明,即使该字段中没有数据。
与HTML相比
HTML输入有一个占位符,其指定如下:
用户代理应该向用户提供此提示。当元素的值为空字符串或控件未聚焦(或两者都未聚焦)时。
您可以在此测试链接在浏览器中尝试此功能。
我认为,反对JavaFX这种行为的论点“当抓取焦点以表示已准备好接收用户输入时,应清除提示文本”是没有意义的,因为焦点文本字段有一个清晰可见的焦点环,因此用户知道即使在显示提示文本时,控件也已准备好接收输入。
在这方面,我认为JavaFX在默认情况下应该以与大多数HTML用户代理相同的方式进行操作。可以在JavaFX问题跟踪程序中创建一个调整请求,请求JavaFX中的输入提示与HTML实现类似(如果还没有为此创建问题的话)。
可供替代的
第三方Gluon Glisten具有自定义TextField控件,可以具有以下属性:
基于Glistet的TextField的好处是提示文本始终可见,无论用户是否在控件中输入了任何内容。
简而言之:如何让UITextField框在用户第一次按键时移除所有内容?我不希望信息被删除,直到用户开始输入一些东西。即,在开始编辑时清除它是不够的。 长版本:我有三个UITextField循环(使用返回键并在“shouldReturn”方法中捕获按键。UITextField 中已有文本,如果用户未键入任何内容,而只是转到下一个 UITextField,则该值应保留(默认行为)。 但是我希望如果用
问题内容: 用户停止键入时需要执行搜索。我知道我应该使用 setTimeout() 。但是使用 Reactjs我找不到它是如何工作的。 有人可以告诉我当用户停止键入几秒钟(假设为5)时如何调用方法(将处理Search)。我不知道该在哪里编写代码来检查用户是否停止键入。 我想在用户停止键入时调用sendToParent方法。 问题答案: 您可以按照以下方式使用您的代码, 另外,您需要在构造函数中绑定
我的布局中有一个编辑文本,我尝试过在我的编辑文本中放置提示或文本。 当我第一次触摸或点击edittext时,移动键盘弹出输入文本,这是预期的,但edittext中的文本或提示不会被删除。我必须点击2次编辑文本,然后第一次移动键盘弹出,第二次点击删除文本。 我希望在第一次点击本身的文本应该从edittext删除。 例如:假设EditText将初始文本作为用户名,那么当用户第一次单击EditText时
问题内容: 有没有一种快速的方法来创建带有右侧图标的输入文本元素,以清除输入元素本身(如google搜索框)? 我环顾四周,但只发现了如何将图标作为输入元素的背景。是否有jQuery插件或其他工具? 我想要输入文本元素中的图标,例如: 问题答案: 将a添加到您的输入中 该支持相当不错,但在IE <10中不起作用 旧浏览器的可清除输入 如果您需要IE9支持,请采取以下解决方法 使用标准和一些HTML
问题内容: 我有一个字段,我想在其中应用的变体。 该字段与ajax调用绑定在一起,当用户更改输入时,服务器端将处理数据,但是,我不想太频繁地进行调用。 假设用户要输入一个真正的字符串,我希望仅在用户完成将要键入的单词后才能进行呼叫。不过,我不想使用诸如模糊之类的事件。有什么比实现更好的方法呢? 问题答案: 使用在角> 1.3 没有-在标记中: 在您的后备控制器/范围内 然后,您将仅在1000ms不
我们的备份系统创建。bak文件,我们可以使用它来恢复文件,如果我们遇到问题。如果不处理,这些文件将填满我们的存储空间,因此我找到了一个批处理文件,每天创建新的批处理文件后,我都可以运行该文件来删除旧的批处理文件。 文件-p“c:\xxx\yyy”-s-m*。bak/D-2/C“cmd/C del@path” 这工作正常,但我想创建一个安全网,以便无论出于何种原因,我们的备份系统出现故障并且没有创建