2017-04-04 1 views
-1

フォントサイズを変更せずにTextFieldのキャレットのサイズを変更しようとしていますが、できません。TextField(JavaFX 8)のキャレットのサイズを変更する

誰でもその方法を知っていますか?

ありがとうございます!

+0

おそらく、[キャレットのパスを変更]することができます(http://stackoverflow.com/questions/27315861/hide -input-caret-of-textfield-in-javafx8)を使用します。 – jewelsea

答えて

1

私はあなたがこれをやりたい理由は考えていません。そして、これはおそらくあなたが望むものをあなたに与えるものではありませんが、キャレットのサイズを変更します。大きなキャレットは、引き続き含まれているTextFieldの範囲内に収まるようにクリップされます。

mとaの間の小さな線は小さなキャレットです。 stackoverflowの減少明瞭に画像転送、見えにくいので:

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クラスを使用していますので、それは勝ちましたJava 9では、TextFieldSkinは公開APIになります(com.sunパッケージの代わりにjavafxパッケージに移動する)ので、パッケージを変更すると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

関連する問題