更改 TextField 中插入符号的大小 (JavaFX 8)
Change the size of the caret in a TextField (JavaFX 8)
我试图在不修改字体大小的情况下调整 TextField 中插入符的大小,但我做不到。
有人知道怎么做吗?
谢谢!
我不知道你为什么要这样做。这可能不会给你你想要的,但它确实改变了插入符号的大小。请注意,大插入符号仍将被裁剪到包含 TextField 的范围内。
m 和 a 之间的细线是小插入符号。图像传输到 Whosebug 降低了清晰度,因此很难看到:
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 class,因此它不适用于 Java 9。在 Java 9 中,TextFieldSkin 将变为 public 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);
}
}
此答案基于此答案:
- Hide input caret of TextField in JavaFX8
我试图在不修改字体大小的情况下调整 TextField 中插入符的大小,但我做不到。
有人知道怎么做吗?
谢谢!
我不知道你为什么要这样做。这可能不会给你你想要的,但它确实改变了插入符号的大小。请注意,大插入符号仍将被裁剪到包含 TextField 的范围内。
m 和 a 之间的细线是小插入符号。图像传输到 Whosebug 降低了清晰度,因此很难看到:
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 class,因此它不适用于 Java 9。在 Java 9 中,TextFieldSkin 将变为 public 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);
}
}
此答案基于此答案:
- Hide input caret of TextField in JavaFX8