当前位置: 首页 > 知识库问答 >
问题:

无法从JavaFX操作Label

商同化
2023-03-14

我试图在用户每次进入该页面时更改JavaFX软件GUI标签的文本。为此,我必须能够更改该标签的值,例如将其解析为变量并执行这些操作。

问题是,由于标签都是用FXML编写的,我不知道如何在Java上正确使用它。我尝试了:

@FXML公共标签WordID;

为了使标签(其ID为“WordID”)成为一个html" target="_blank">对象,我失败了。当我这样做的时候,程序就不会再进入那个框架了。我该怎么办?

代码:

public class Screen3Controller implements Initializable, ControlledScreen {

ScreensController myController;

  @Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}

public void setScreenParent(ScreensController screenParent){
    myController = screenParent;
}

@FXML
private void goToScreen1(ActionEvent event){
   myController.setScreen(ScreensFramework.screen1ID);
}

@FXML
private void goToScreen2(ActionEvent event){
   myController.setScreen(ScreensFramework.screen2ID);
}

}

FXML:

<Label fx:id="WordID" layoutX="393.0" layoutY="148.0" prefWidth="177.0" text="">
  <font>
    <Font name="Avenir Roman" size="40.0" />
  </font>
</Label>

屏幕2的按钮侦听器:

@FXML
private void goToScreen3(ActionEvent event){
   myController.setScreen(ScreensFramework.screen3ID);
   WordID.setText("LOl");
}

错误消息:

Glass在以下位置检测到未解决的Java异常-[GlassViewDelegate sendJavaMouseEvent::]:src/com/sun/mat/ui/GlassViewDelegate。m: 543线程“JavaFX应用程序线程”java.lang.RuntimeException中的异常:…com.sun.JavaFX.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)位于com.sun.JavaFX.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)位于com.sun.JavaFX.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseeEventNotification.run(GlassViewEventHandler.java:250)位于com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseeEventNotification.run(GlassViewEventHandler.java:173)位于java.security.AccessController。javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1444)…40更多由以下原因引起:java.lang.NullPointerException at screensframework.Screen3Controller.mostrarPalavra(Screen3Controller.java:89)…50更多

共有1个答案

和魁
2023-03-14

要以编程方式使用标签,只需在控制器文件中声明一个变量,该变量的id与在控制器文件中声明的id相同。fxml文件:

YourFXML. fxml

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="com.sample.Screen3Controller ">
    ...
    <Label fx:id="WordID" layoutX="393.0" layoutY="148.0" prefWidth="177.0" text="">
      <font>
        <Font name="Avenir Roman" size="40.0" />
      </font>
    </Label>
    ...
</AnchorPane>

com.sample.Screen3Controller必须引用包中的现有. java文件com.sample

Screen3Controller.java

import javafx.scene.control.Label;  //make sure you're importing the JavaFX Label

public class Screen3Controller implements Initializable, ControlledScreen {

    ScreensController myController;
    @FXML private Label WordID;

    ...

    WordID.setText("some text...");

    ...
}
 类似资料:
  • 在这里,我得到了一个notaccepted异常,我知道原因是stateMachine.getState()是INITIAL,它不能直接将状态从INITIAL更改为THIRD。 所以我的问题是,我是否可以配置我的statemachine在第一个事件完成时自动触发第二个事件

  • 我试图调用Microsoft Dynamics CRM 365(2016/V8.2)实例的WebAPI(OData REST服务)的BulkDelete()操作。 这感觉像是进步,但它没有告诉我应该使用什么属性名。“object ComplexType”的CRM WebAPI文档没有列出我可以在该对象中使用的任何属性名称,也没有找到关于如何通过WebAPI使用BulkDelete操作的任何示例代码

  • 无法在下面的链接中执行右键单击操作。我们尝试了几乎所有的案例来实现自动化。https://the-internet.herokuapp.com/context_menu 我使用的是Selenium 3.3和geckodrivers的最新版本。 动作动作=新动作(驱动);行为moveToElement(元素)。点击();行为上下文单击(元素)。build()。执行();行为发送键(键。箭头向下)。发

  • 我在网格窗格中用两个ImageView做拖放测试。我的问题是,当我完成拖放并将目标imageview移动到源imageview并释放鼠标时,我错误地以显示“img2”中的图片而不是“img1”中的图片结束。当我注释掉“setOnDragExited”方法时,我最终得到了正确的图像“img1”,任何建议都将不胜感激。

  • 问题内容: 我在oracle站点上找到了此代码,但是我无法使用Eclipse启动,这是说“无法启动”。我已经安装了JDK 8,但是它不起作用… 有人有解决办法吗?:p 链接到找到代码的网站:https : //docs.oracle.com/javafx/8/embed_swing/jfxpub- embed_swing.htm 问题答案: 在Java 8中,即使没有方法,您也可以直接启动子类。问