【发布时间】:2017-04-04 16:57:51
【问题描述】:
我正在尝试在不修改字体大小的情况下调整 TextField 中插入符号的大小,但我做不到。
有人知道怎么做吗?
谢谢!
【问题讨论】:
-
您可能可以change the caret path,如链接答案中所示。
标签: css javafx-8 textfield caret
我正在尝试在不修改字体大小的情况下调整 TextField 中插入符号的大小,但我做不到。
有人知道怎么做吗?
谢谢!
【问题讨论】:
标签: css javafx-8 textfield caret
我不知道你为什么要这样做。这可能不会给你你想要的,但它确实改变了插入符号的大小。请注意,大插入符号仍将被剪裁到包含 TextField 的范围内。
m 和 a 之间的小线是小插入符。将图像传输到 stackoverflow 会降低清晰度,因此很难看清:
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。在 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);
}
}
此答案基于此答案:
【讨论】: