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

JavaFX-Label--如何访问类成员

宋唯
2023-03-14

所以我的问题很简单。当类成员是字符串而不是标签时,我可以访问单独类中的类成员,但当它们是标签时,我似乎不能。使用JDK7U6(W/JavaFX2.2)。

简单的例子。第一个管用,第二个不行。foo.label可以在第一个示例中赋值,但是在第二个示例中得到了一个NullPointer。有人能解释为什么在下面的第二个示例中foo.label是null吗?

更新:我从最初的问题中删除了@fxml注释,因为我认为它们对我遇到的问题没有必要。另外,请参阅@Jewelsea对答案的评论...最后,为了完整起见,我添加了FXML文件(在Q的底部)。

这是有效的:

// Example 1:
public class SampleController implements Initializable {
    Foo foo = new Foo();

    public void handleButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");
        foo.label = "Hello World!";
        System.out.println(foo.label);
    }

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

// Example 1 -- Foo.java:
public class Foo {
    public String label;
}
// Example 2:
public class SampleController implements Initializable {
    Foo foo = new Foo();

    public void handleButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");
        foo.label.setText("Hello World!");  // gives NullPointer exception !!
    }

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

// Example 2 -- Foo.java:
import javafx.scene.control.Label;

public class Foo {
    public Label label;
}
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml" fx:controller="javafxapplication4.SampleController">
    <children>
        <Button layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" />
        <Label layoutX="126" layoutY="120" minHeight="16" minWidth="69" fx:id="label" text="hey!" />
    </children>
</AnchorPane>

共有1个答案

相俊迈
2023-03-14

在第二个示例中,您从未将foo标签初始化为任何内容,因此它将保持为NULL。

您确实使用Foo Foo=new Foo();创建了一个Foo对象,但这不会初始化Foo中的label字段成员。特别是,@fxml注释不会像您在所提供的代码中使用它那样做任何事情。这是因为Foo不是控制器。

允许您的示例运行的一些方法:

  • @fxml public Label Label;移动到您的SampleController.
  • 去掉foo类,并确保您的fxml定义fx:id=“label”.

2.在SampleController中初始化Foo标签

  • 将以下代码放在示例控制器的initialize方法中:foo.Label=new Label();.
  • 此外,在初始化中,将foo标签添加到布局窗格之类的容器中,以便它可见。
    null

注意:这个问题更多的是关于如何使用@fxml初始化类成员,然后是如何访问类成员。访问只是通过普通的getter/setters或成员字段访问,就像您在示例中已经有的那样。

第一个示例之所以能够工作,是因为在使用新字符串之前,您要显式地将foo.label初始化为新字符串(使用foo.label=“hello world!”;)。

 类似资料:
  • 最近我正在用JavaFx2.0编程一个软件,但是我遇到了一个大问题,那就是——我如何访问一个控制器类?对于每个具有相同类类型的控制器类,它们可能会因为它所依赖的模型而表现不同,所以我想获取视图的控制器类并为其提供指定的模型,我可以这样做吗?我已经尝试通过FXMLLoader获取控制器,但是方法getController()返回null!为什么? 1.LightView.java 2.LightVi

  • 我有一个主要的场景,在那里我保留了所有的木鬼。它有一个菜单,打开新的场景,在那里我有一些设置: 这个eventLog文本区是我放置所有日志的地方,比如应用程序启动、设置更改、项目保存等。我正在用openProjectWindow void打开新场景,并且我正在将这些信息添加到我的日志记录程序中。我的新窗口是一个单独的类: 完成后,我需要访问StartController.EventLog,但我尝试

  • 我的背景: 9-ea-113(这是javafx现在完全模块化,没有jfrt.jar) eclipse-neon-M6与当前的测试版支持java9(运行在java8上,如果这很重要) win7 简单地说 没有编译,因为javafx。找不到xx个包。 要怎么做?

  • 我正在使用nashorn引擎,我正在尝试扩展以下java类 Javascript代码:在init()方法中,我想访问超类成员(直接设置受保护字段的值或使用公共setter) 在java中,我创建对象实例并调用init方法,但字段“name”为空。 我还尝试使用Java.super(扩展). setName("name");但这抛出了一个异常

  • 类的数据成员(类定义中声明的变量)和成员函数(类定义中声明的函数)属于该类的类范围(class's scope)。非成员函数在文件范围(file scope)中定义。 在类范围中,类成员可由该类的所有成员函数直接访问,也可以用名称引用。在类范围外,类成员是通过一个对象的句柄引用,可以是对象名、对象引用或对象指针(第7章将介绍,每次引用对象中的数据成员和成员函数时,编译器插入一个隐式句柄)。 类的成