2017-04-04 27 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