所以我的问题很简单。当类成员是字符串
而不是标签
时,我可以访问单独类中的类成员,但当它们是标签
时,我似乎不能。使用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>
在第二个示例中,您从未将foo标签初始化为任何内容,因此它将保持为NULL。
您确实使用Foo Foo=new Foo();
创建了一个Foo对象,但这不会初始化Foo中的label字段成员。特别是,@fxml注释不会像您在所提供的代码中使用它那样做任何事情。这是因为Foo不是控制器。
允许您的示例运行的一些方法:
@fxml public Label Label;
移动到您的SampleController
.foo
类,并确保您的fxml定义fx:id=“label”
.2.在SampleController中初始化Foo标签
foo.Label=new Label();
.注意:这个问题更多的是关于如何使用@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章将介绍,每次引用对象中的数据成员和成员函数时,编译器插入一个隐式句柄)。 类的成