我想隐藏JavaFX8中TextField的输入插入符号。我已经尝试将文本填充设置为白色(我的TextField具有白色背景),但随后我的用户输入也消失了。隐藏JavaFX8中TextField的输入插入符号
问题是,文本字段仍然需要焦点,所以我还想到了一些EventHandler,这些EventHandler监听用户输入,并在按下某个按键时专注于文本字段,但随后我会错过键入的第一个键。
任何人都知道如何做到这一点?或者在JavaFX8中不可能?
我想隐藏JavaFX8中TextField的输入插入符号。我已经尝试将文本填充设置为白色(我的TextField具有白色背景),但随后我的用户输入也消失了。隐藏JavaFX8中TextField的输入插入符号
问题是,文本字段仍然需要焦点,所以我还想到了一些EventHandler,这些EventHandler监听用户输入,并在按下某个按键时专注于文本字段,但随后我会错过键入的第一个键。
任何人都知道如何做到这一点?或者在JavaFX8中不可能?
更新为Java 8u40
的CSS样式类,加入到JavaFX的切换和关闭文本字段插入符号是(在大多数情况下)比这个答案自定义皮肤的方法更好的解决方案。
该属性可以在CSS被应用到任何文本区域或文本字段:
-fx-display-caret: false;
有关详细信息,请参阅相关的问题:
您可以使用custom skin来控制t分机字面插页。
样皮肤
允许您指定在构造函数中插入符号的颜色。
小心:此解决方案从com.sun类扩展而来,因此无法保证在未来的JavaFX版本中继续工作。 (该解决方案已针对Java8u25进行了测试,并为该版本工作)。
我建议你create a feature request in the JavaFX issue tracker使用公开支持的方法(例如添加新的css属性来控制插入符外观)请求对插入符号的更多控制。
import com.sun.javafx.scene.control.skin.TextFieldSkin;
import javafx.scene.control.TextField;
import javafx.scene.paint.Color;
public class TextFieldCaretControlSkin extends TextFieldSkin {
public TextFieldCaretControlSkin(TextField textField, Color caretColor) {
super(textField);
setCaretColor(caretColor);
}
private void setCaretColor(Color color) {
caretPath.strokeProperty().unbind();
caretPath.fillProperty().unbind();
caretPath.setStroke(color);
caretPath.setFill(color);
}
}
示例应用程序
演示了如何使用自定义TextFieldCaretControlSkin的。
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class CaretColorizer extends Application {
@Override
public void start(Stage stage) throws Exception {
TextField redCaretTextField = new TextField("Red Caret");
redCaretTextField.setSkin(
new TextFieldCaretControlSkin(
redCaretTextField,
Color.RED
)
);
TextField noCaretTextField = new TextField("No Caret");
noCaretTextField.setSkin(
new TextFieldCaretControlSkin(
noCaretTextField,
Color.TRANSPARENT
)
);
TextField normalTextField = new TextField("Standard Caret");
VBox layout = new VBox(
10,
redCaretTextField,
noCaretTextField,
normalTextField
);
layout.setPadding(new Insets(10));
stage.setScene(new Scene(layout));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
感谢您的回答!对于这个问题真的很棒,我更喜欢这个解决方案。可能它会停止工作,其他人可以随时使用我的hacky解决方案。我也会要求这个功能,也要感谢你提到这个! – bashoogzaad 2014-12-06 16:09:26
我已经找到了解决方法,我想和你分享一下。如果有其他人想在用户输入之前隐藏插入符号,可以使用以下代码:
我创建了一个更改侦听器,它可以更改用户输入上的文本颜色。
textfield.textProperty().addListener(new ChangeListener<String>(){
@Override
public void changed(ObservableValue<? extends String> observable,
String oldValue, String newValue) {
if (!textfield.getText().trim().isEmpty()) {
textfield.setStyle("-fx-text-fill: black");
} else {
textfield.setStyle("-fx-text-fill: white");
}
}
});
确保文本填充为白色启动时,我在FXML的css文件这样做:
#textfield {
-fx-text-fill: white;
}
对不起,打扰你所有的这个问题。然而,这个问题在网上没有很好的讨论,所以我希望它对你们中的一些人有用。
相关的问题:[?如何更改的JavaFX 2.0插入颜色(http://stackoverflow.com/questions/10057989/how-to-change-the-caret-color-in-javafx- 2-0)。 – jewelsea 2015-01-28 20:54:17
相关问题:[如何关闭Java中的TextArea中闪烁的光标?](http://stackoverflow.com/questions/30597180/how-can-i-turn-off-the-blinking-cursor-in -a-textarea-in-java) – jewelsea 2015-06-02 22:47:05