我想隱藏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