2017-04-04 65 views
-1

我试图在不更改字体大小的情况下调整TextField中的插入符号大小,但我无法做到这一点。在TextField中更改插入符的大小(JavaFX 8)

有谁知道该怎么做?

谢谢!

+0

你或许可以[插入符路径(http://stackoverflow.com/questions/27315861/hide -input-caret-of-textfield-in-javafx8),如链接答案中所示。 – jewelsea

回答

1

我不知道你为什么要这样做。这可能不会完全给你想要的东西,但它确实改变了插入的大小。请注意,大字符仍将被剪裁在包含TextField的范围内。

m和a之间的小线是小插入符号。图像传送到计算器降低清晰度,所以很难看到:

small caret

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 BiglyCaret extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
     TextField bigCaretTextField = new TextField("Big Caret"); 
     bigCaretTextField.setSkin(
       new TextFieldCaretControlSkin(
         bigCaretTextField, 
         2 
       ) 
     ); 

     TextField smallCaretTextField = new TextField("Small Caret"); 
     smallCaretTextField.setSkin(
       new TextFieldCaretControlSkin(
         smallCaretTextField, 
         0.5 
       ) 
     ); 

     TextField normalTextField = new TextField("Standard Caret"); 

     VBox layout = new VBox(
       10, 
       bigCaretTextField, 
       smallCaretTextField, 
       normalTextField 
     ); 

     layout.setPadding(new Insets(10)); 
     stage.setScene(new Scene(layout)); 

     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

TextFieldCaretControlSkin.java

注意,这个使用了Java 8私有API类,因此它赢得了” t适用于Java 9.在Java 9中,TextFieldSkin将成为公共API(移至javafx包而不是com.sun包),因此如果更改包,它可能在Java 9中起作用。

import com.sun.javafx.scene.control.skin.TextFieldSkin; 
import javafx.scene.control.TextField; 

public class TextFieldCaretControlSkin extends TextFieldSkin { 
    public TextFieldCaretControlSkin(TextField textField, double scale) { 
     super(textField); 

     setScale(scale); 
    } 

    private void setScale(double scale) { 
     caretPath.setScaleX(scale); 
     caretPath.setScaleY(scale); 
    } 
} 

这个答案是基于这样的回答:

+0

这很完美。谢谢! – Aniru