- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果一个节点有 fx:id(比如 a)和正常的 id(css id)(比如 b)。如果使用 lookup 来搜索这个节点:
节点node=scene.lookup("#a")
以上语句返回null。但是如果讨论中没有对应节点的css id,那么上面的语句返回正确的节点。
虽然使用下面给定的语句总是返回正确的结果:
节点node=scene.lookup("#b")
谁能解释一下为什么查找方法的行为如此奇怪?
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?import javafx.scene.text.*?>
<GridPane hgap="14.0" maxHeight="+Infinity" maxWidth="+Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="223.0" prefWidth="323.0" vgap="20.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<VBox maxHeight="+Infinity" maxWidth="+Infinity" minHeight="-Infinity" spacing="7.0" GridPane.rowIndex="0">
<children>
<HBox alignment="TOP_RIGHT">
<children>
<Label fx:id="headerMessage" text="message" textAlignment="LEFT" wrapText="true">
<font>
<Font name="System Bold" size="13.0" />
</font>
</Label>
</children>
</HBox>
<HBox alignment="TOP_RIGHT" spacing="5.0">
<children>
<Label fx:id="qty" text="details" textAlignment="LEFT" wrapText="true">
<font>
<Font size="12.0" />
</font>
</Label>
<TextField fx:id="qtyT" />
</children>
</HBox>
<HBox alignment="TOP_RIGHT" spacing="5.0">
<children>
<Label fx:id="name" text="details" textAlignment="LEFT" wrapText="true">
<font>
<Font size="12.0" />
</font>
</Label>
<TextField fx:id="nameT" />
</children>
</HBox>
<HBox alignment="TOP_RIGHT" spacing="5.0">
<children>
<Label fx:id="remarks" text="details" textAlignment="LEFT" wrapText="true">
<font>
<Font size="12.0" />
</font>
</Label>
<TextArea fx:id="remarksT" prefHeight="60.0" prefWidth="149.0" wrapText="true" />
</children>
</HBox>
</children>
</VBox>
<HBox maxHeight="-Infinity" maxWidth="+Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="25.0" prefWidth="253.0" GridPane.rowIndex="1">
<children>
<Pane maxWidth="+Infinity" HBox.hgrow="ALWAYS" />
<Button id="cancel-button" fx:id="cancelButton" cancelButton="true" minWidth="80.0" mnemonicParsing="false" text="Cancel" HBox.hgrow="NEVER">
<HBox.margin>
<Insets />
</HBox.margin>
</Button>
<HBox fx:id="okParent" alignment="CENTER">
<children>
<Button id="ok-button" fx:id="okButton" minWidth="80.0" mnemonicParsing="false" text="Ok" HBox.hgrow="NEVER">
<HBox.margin>
<Insets left="14.0" />
</HBox.margin>
</Button>
</children>
</HBox>
</children>
</HBox>
</children>
<columnConstraints>
<ColumnConstraints halignment="CENTER" hgrow="ALWAYS" maxWidth="+Infinity" minWidth="-Infinity" />
</columnConstraints>
<padding>
<Insets bottom="14.0" left="14.0" right="14.0" top="14.0" />
</padding>
<rowConstraints>
<RowConstraints maxHeight="+Infinity" minHeight="-Infinity" valignment="CENTER" vgrow="ALWAYS" />
<RowConstraints maxHeight="-Infinity" minHeight="-Infinity" vgrow="NEVER" />
</rowConstraints>
</GridPane>
在上面的 fxml 中,对于没有任何 css id 的节点,查找在 fxml id 上工作正常。如果存在 css id,则返回空值
Label headerMessage = (Label) alertStage.getScene().lookup("#headerMessage");
final TextField qty = (TextField) alertStage.getScene().lookup("#qtyT");
Label name = (Label) alertStage.getScene().lookup("#name");
final TextArea remarksT = (TextArea) alertStage.getScene().lookup("#remarksT");
final TextField nameT = (TextField) alertStage.getScene().lookup("#nameT");
查找方法仅对下面给出的语句失败。
Button okButton = (Button) alertStage.getScene().lookup("#okButton");
最佳答案
编辑 - 在 OP 添加 MCVE 之后
深入研究这个问题。我在 FXML 文档的深处写了一个简单的声明,它解释了行为。实际上,通过调用 setId()
将 fx:id 指定为控件/布局的 默认 id
。
除非被覆盖,fx:id
保持为对象的默认 id
。
来自 Introduction To FXML :
Assigning an fx:id value to an element creates a variable in the document's namespace that can later be referred to by variable dereference attributes, such as the "toggleGroup" attribute shown above, or in script code, discussed in a later section. Additionally, if the object's type defines an "id" property, this value will also be passed to the objects setId() method.
lookup()
正在完美地完成它的工作,并且正在为 CSS 选择器
而不是 fx:id
工作。
关于java fx : scene's lookup method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31471488/
我正在使用 JavaFX 2.2.7-b01 编写应用程序。 这是我目前拥有的代码示例。如何允许调整应用程序窗口的大小但保持最初配置的纵横比?换句话说,如果用户调整窗口大小,则窗口宽度应始终保持为窗口
所以我正在努力将我的 cocos2d 游戏移植到 Sprite Kit。 在 cocos2d 中有两种情况,我会在整个游戏场景中叠加一个菜单。第一种情况是暂停,第二种情况是游戏结束。 在 cocos2
我在代码的最后一行遇到错误。 - (SCNScene *)getWorkingScene { SCNScene *workingSceneView = self.scene; if
我需要在代码中手动设置插入符号位置。getCaretPosition()下有一个javafx.scene.control.TextInputControl,但没有设置方法。 如何设置插入符的位置? 最
方法scene(_ scene: UIScene, continue userActivity: NSUserActivity)用户单击通用链接后启动应用程序时不会调用。 当用户单击通用链接后再次打开
我正在使用 ARKit 图像跟踪配置,一旦检测到图像,图像上就会弹出 3D 场景。 但是当我设置两个不同的图像触发两个不同的场景文件时,一张图像总是在同一张图像上弹出两个不同的场景文件。我敢肯定图像不
如何更改存储在网格中的对象的属性?我尝试了这个,但它给了我上面的错误: Group group = new Group(); double dimension_x=100; d
我在填充 javafx tableview 时遇到问题。 我目前正在开发基于 GUI 的事件管理工具(适用于大学),但我一直在尝试填充 Tableview 列表,该列表应该位于边框 Pane 布局的中
大家好,我认识 javafx,我正在尝试将 BorderPane 转换为 anchronPane,同时发生错误,我不知道该怎么做,我正在学习教程,所以请帮忙 import java.io.IOExce
我有创建图像的代码:(m_img 是 javafx.scene.image.Image) Image m_img = new Image("file:" + p_Fil.getAbsoluteFile
当最初从FXML加载Scene时,如何在Java代码中为Scene添加一个新节点? 我已经从FXML加载了,如下所示 Parent root = FXMLLoader.load(getClass().
在以下代码上: ScrollPane scrollPane = new ScrollPane(); 我遇到异常 java.lang.NoClassDefFoundError: javafx/scene
我从 JavaFX 开始。 错误发生在我执行我的程序时,在我尝试这样做之前,它工作正常并且按钮点击有效,但那是在我打算让按钮点击更改文本之前。
我正在制作一个滑动动画以将一个场景切换到另一个场景,但是当我调用此方法时,它在切换场景时有延迟。我发现原因是类Scene的一个方法snapshot()。有没有人有解决办法? 代码: public vo
当发现“条形码”时,我尝试以编程方式更改场景,但我不断收到错误... 导入的模块: import UIKit import AVFoundation import SpriteKit import S
我试图通过场景工具包节点旋转,但它没有旋转。 我想让它绕 y 轴旋转。它是一个球体。 let node = SCNNode() node.geometry = SCNSphere(radius: 1)
在应该加载场景的按钮中,我正在尝试学习使用 guard 语句,但对它在四个“转义”中的每一个中所做的事情感到非常困惑。也不知道在没有场景的情况下应该怎么处理。 此处正确使用的是: continue、r
本文整理了Java中javafx.scene.input.ZoomEvent类的一些代码示例,展示了ZoomEvent类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Ma
我正在使用 JavaFx 和 Scenebuilder,并希望在 Eclipse 中为自己创建一个名为“Taskplanner”的本地应用程序。 我创建了一个新舞台并使用场景设置它(请参阅 Main.
我在舞台上有一个场景。场景的宽度为 337.0 像素。但是,当我将它添加到舞台时,舞台的大小为 337.6 像素,由于 0.6 像素的差异,在屏幕的右边缘留下了一个白色间隙。 我尝试使用 stage.
我是一名优秀的程序员,十分优秀!