- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好,我正在开发一个简单的编辑器来使用 JavaFX 创建一些用例。现在,当我想将两个节点相互连接时,我想为该链接指定一个名称。目前的想法是将标签放入 anchor Pane 中,并将该 Pane 置于链接的中间。问题是, getWidth() 和 getLayoutBounds() 函数都返回正确的结果,但在所有情况下都返回 0。我怎样才能算出该anchorPane的宽度?感谢您的所有回答!
//Java代码
public class Link extends AnchorPane{
public Link() {
FXMLLoader fxmlLoader = new FXMLLoader(
getClass().getResource("../view/Link.fxml")
);
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
public void bindAnchorPane(DraggableNode source, DraggableNode target){
//Middlepoint X source and target node
NumberBinding middleX = Bindings.add(Bindings.divide(source.layoutXProperty(), 2), Bindings.add(Bindings.divide(target.layoutXProperty(), 2), source.getWidth() / 2.0));
//Middlepoint Y source and target node
NumberBinding middleY = Bindings.add(Bindings.divide(source.layoutYProperty(), 2), Bindings.add(Bindings.divide(target.layoutYProperty(), 2), source.getWidth() / 2.0));
//X position of the anchorPane
//Middlepoint X - anchor.getWidth()/2
NumberBinding coordX = Bindings.subtract(middleX, anchor_link_label.getWidth()/2;
// Bounds bounds = anchor_link_label.getLayoutBounds();
// NumberBinding coordX = Bindings.subtract(middleX, (bounds.getMaxX() - bounds.getMinX()));
anchor_link_label.layoutXProperty().bind(coordX);
anchor_link_label.layoutYProperty().bind(middleY);
}
}
//FXML文件
<fx:root stylesheets="@application.css" type="Pane" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<CubicCurve fx:id="node_link" controlX2="50.0" controlY1="10.0" controlY2="10.0" endX="10.0" fill="#1f93ff00" stroke="BLACK" />
<AnchorPane fx:id="anchor_link_label" managed="false">
<Label fx:id="label_link" text="" onMouseClicked="#showTextField" visible="false" managed="false"/>
<TextField fx:id="textField_link" minWidth="100" visible="true" managed="true"/>
</AnchorPane>
</children>
</fx:root>
最佳答案
在这段代码运行时,高度和宽度为零,因为我猜测节点尚未布局。
如果您希望 middleX
、middleY
和 coordX
绑定(bind)更新为当前宽度/高度,那么您需要将它们绑定(bind)到宽度高度属性/绑定(bind),而不仅仅是您在零时进行“source.getWidth()/2.0
”调用时的宽度/高度。
试试这个:
// Middlepoint X source and target node
NumberBinding middleX = source.layoutXProperty().divide(2)
.add(target.layoutXProperty().divide(2).add(source.widthProperty().divide(2)));
// Middlepoint Y source and target node
NumberBinding middleY = source.layoutYProperty().divide(2)
.add(target.layoutYProperty().divide(2).add(source.heightProperty().divide(2)));
// X position of the anchorPane
// Middlepoint X - anchor.getWidth()/2
NumberBinding coordX = middleX.subtract(anchor_link_label.widthProperty().divide(2));
// anchor_link_label.layoutXProperty().bind(coordX);
// anchor_link_label.layoutYProperty().bind(middleY);
// To avoid binding and getting a "bound value cannot be set" error
// you can just use listeners instead.
// However, this is slightly hackish, since you are re-laying-out this child
// after the parent tries to lay it out already.
// What you probably should do is define a parent that overrides
// `layoutChildren()` and determines how to layout this node.
// Here are the listeners:
coordX.addListener((obs, oldVal, newVal) -> {
anchor_link_label
.setLayoutX(
newVal.doubleValue() - anchor_link_label.getLayoutBounds().getMinX());
});
middleY.addListener((obs, oldVal, newVal) -> {
anchor_link_label
.setLayoutY(
newVal.doubleValue() - anchor_link_label.getLayoutBounds().getMinY());
});
一个可能的替代方案是使用 HBox
作为您的父级并将对齐方式设置为居中,而不是使用通用 Pane
,因为这似乎是您真正想要的它要做的就是将标签放在 Pane 的中央。
关于JavaFX:getWidth() 和 getLayoutBounds() 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50353612/
我有下面的代码,它是在一个函数中定义的,该函数实际上设置父组件的宽度并进行布局...这个函数是从 4 个地方调用的,在一个地方有一个场景出现下面的错误,你可以看到我有检查了未定义,但它仍然在这个 IF
我正在处理 Java JFrame 对象,每当我调用 getWidth() 和 getHeight() 的值时,它都是总是返回超过我使用 setPreferredSize() 函数为面板设置的值。 有
我有一个图像displayStartText和originalStartText这样初始化: Image originalStartText = new ImageIcon(getClass().ge
为什么两个输出都打印84?第一个应显示为 84,第二个应显示为 220。如果我再次单击,则两个输出均显示为 220。 public void btnClick(View v) { System
我有一个算法,可以渲染具有宽度和高度的对象。但是当我使用 setWidth() 时,该对象实际上并没有获得该宽度,它以某种方式获得了我给它的宽度的 x2 之类的东西。检查下面的代码: var
我很难找到为什么这段代码返回空指针: import java.awt.Graphics2D; import java.awt.Rectangle; public class Move { priv
我想在加载后获取位图的宽度,我使用这段代码,其中 mybackground 是一个等于 R.drawable.background 的 int。 background=BitmapFactory.de
我希望通过使用 gamePanel 的 getWidth 方法来定位 Racket ,但它返回 0。它对于框架工作正常,对于面板也有效,但我决定重写大量代码并现在我无法让它工作。感谢帮助:) impo
我知道 Display 方法 getWidth() 自 API 13 以来已被弃用。我有以下代码行: Display display = ((WindowManager) getContext().g
我有一个像这样的 ImageView 我正在尝试通过使用获取在 imageview 中显示的图像的宽度 ImageView artCover = (ImageView)findViewById(R
我想让我的 ImageView 的大小是基于其宽度的矩形,这是通过覆盖 onGlobalLayout() 并放置 photo.getWidth() 完成的。但它只在竖屏下有效,在横屏下无效。 肖像效果
我正在 relativeLayout 中动态创建一些 ImageView,但我需要根据屏幕的高度和宽度改变大小。在我设置高度时,尚未创建 View 和布局,这意味着 getHeight() 和 get
这些方法在动态检索时返回正确的值,例如。在 onCreate() 中,但唯一的异常(exception)是当维度在 xml 布局文件中指定为 undefined 时,像 'wrap content'
我的 android 应用程序可绘制文件夹中有一个 jpg 图像,分辨率为 1000x600。我像这样将该图像加载到位图 Bitmap bitMap = BitmapFactory.decodeRe
本文整理了Java中android.graphics.YuvImage.getWidth()方法的一些代码示例,展示了YuvImage.getWidth()的具体用法。这些代码示例主要来源于Githu
本文整理了Java中am.widget.zxingscanview.ZxingScanView.getWidth()方法的一些代码示例,展示了ZxingScanView.getWidth()的具体用法
所以我想创建一个数轴类,我可以用它来显示沿单个轴的单个点,但我希望它能够响应当前所在容器的大小,并相对于该容器更改其大小。不幸的是,我无法正确使用 getWidth() 和 getHeight() 来
我正在重写 JPanel 的 paintComponent() 方法以在屏幕上绘制一些内容。 这就是它的样子: 我使用以下代码来设置剪切区域。这样边缘就可以弯曲。 RoundRectangle2D r
我需要调用getWidth()在我的 JPanel 对象“gameboard”上并将其存储在变量“width”中。这看起来很简单 int width = gameboard.getWidth(); 但
我通过扩展 LinearLayout 创建了一个自定义 View 。我可以在布局生命周期的哪个第一个点调用 subview 的 getWidth() 并获得正值? 最佳答案 如果在 onResume
我是一名优秀的程序员,十分优秀!