gpt4 book ai didi

JavaFX TextField.setPrefColumnCount() 不起作用

转载 作者:行者123 更新时间:2023-12-01 09:56:12 24 4
gpt4 key购买 nike

我看到一些奇怪的行为,在调用 setPrefColumnCount 后,无法正确计算 javafx.scene.control.TextField 的首选宽度。我的具体用例是 javafx.scene.control.Spinner 控件。我的代码如下:

@FXML
private Spinner<Integer> mySpinner;

@Override
public void initialize(URL location, ResourceBundle resources) {
mySpinner.getEditor().setPrefColumnCount(3);
}

执行上述操作后,我得到的微调器仅够容纳单个字符(微调器值如图所示为 999):

Incorrectly Sized Spinner

有谁知道根据我想要显示的位数设置 TextField 宽度的正确方法?我在 Windows 7 Enterprise SP1 x64 上使用 JRE 8u77,以防万一。

编辑

我已经意识到部分问题是即使我通过说明 here 测量文本,我仍然不知道将 Spinner.prefWidth 设置为什么。此外,在底层 TextField 编辑器上设置 prefWidth 似乎与在 Spinner 对象上设置它没有什么不同。有没有某种方法可以获取 TextField.padding 属性(在 initialize 方法中返回 0,即使它最终在每一侧都设置为 7)?如何查询向上/向下箭头的宽度?如果我可以以某种方式计算/查询这些值,那么我可以使用测量文本技术。然而,如果没有这些信息,我不知道如何去做。

最佳答案

padding 属性返回 0,因为当时未布局的 TextField 没有应用任何 CSS 样式。将 TextField 添加到 SceneGraph 后尝试获取填充。

那时您还可以使用Nodes lookup方法来获取包含箭头按钮的StackPane:

 StackPane upArrow = (StackPane) spnr.lookup(".increment-arrow-button");
StackPane downArrow = (StackPane) spnr.lookup(".decrement-arrow-button");

然后应该可以计算微调器的宽度:

 double spinnerWidth = calculateWidth("123", spnr.getEditor()) + upArrow.getWidth();

private double calculateWidth(String value, TextField textField) {
Text text = new Text(value);
text.setFont(textField.getFont());
Insets insets = textField.getInsets();
return insets.getLeft() + text.prefWidth(-1) + insets.getRight();
}

关于JavaFX TextField.setPrefColumnCount() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com