【发布时间】:2016-05-12 16:39:44
【问题描述】:
我看到一些奇怪的行为,在调用 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):
有谁知道根据我希望能够显示的位数设置TextField 的宽度的正确方法?我在 Windows 7 Enterprise SP1 x64 上使用 JRE 8u77,以防万一。
编辑
我已经意识到部分问题是即使我通过指令here 测量文本,我仍然不知道将Spinner.prefWidth 设置为什么。此外,似乎在底层TextField 编辑器上设置prefWidth 与在Spinner 对象上设置它没有什么不同。有没有办法获得TextField.padding 属性(在initialize 方法中返回0,即使它最终在每一侧都设置为7)?如何查询向上/向下箭头的宽度?如果我能以某种方式计算/查询这些值,那么我可以使用测量文本技术。但是,如果没有这些信息,我无法弄清楚如何去做。
【问题讨论】:
-
该属性也从未对我有用。我通过使用不同的方法来确定相对显示缩放来解决它。我创建了一个类似于 css 中的 em 值的变量。
final static double em = Math.rint(new Text("").getLayoutBounds().getHeight());然后我使用乘数作为相对宽度和高度的基础。navButtons.setButtonMinWidth(5*em); -
我尝试基于包含所需数量的零字符的measuring text 做类似的事情。但是,在
Spinner对象的特定情况下,我正在努力解决如何应用该测量。似乎设置基础TextField的prefWidth还必须考虑padding属性(在initialize方法中返回0,即使它最终会是7)和向上/向下按钮(其宽度我似乎无法获得)。
标签: java javafx java-8 javafx-8