大家好!
这是我的代码:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class QuestionClass extends Application {
String labelText;
public static void main(String[] args) {
QuestionClass questionClass = new QuestionClass();
questionClass.setLabelText();
launch(args);
}
public void start(Stage primaryStage) {
Label label = new Label();
// why string value wasn't assigned to string labelText in setLabelText()?
System.out.println("labelText in start(): " + labelText); // OUTPUT: null
label.setText(labelText);
HBox pane = new HBox(label);
Scene scene = new Scene(pane, 100, 100);
primaryStage.setScene(scene);
primaryStage.show();
}
public void setLabelText() {
labelText = "The Text";
System.out.println("labelText in setLabelText(): " + labelText); // OUTPUT: The Text
}
}
我遇到String labelText
的问题,这是一个实例变量。我希望当我创建类QuestionClass
的实例然后在其上调用方法setLabelText()
时,变量labelText
将更改为值“文本”。这是真的。
但之后我通过调用方法launch(args)
来初始化构建我的JavaFX GUI,并且我希望我的labelText
变量已经设置为“文本”值,这可能不会发生,值和值labelText
的结果为空。
问题是“为什么?”。我的推理在哪里有缺陷?
答案 0 :(得分:1)
这里的问题是你在QuestionClass的另一个实例中设置标签的值,然后是向用户显示的那个。解决方案是在当前QuestionClass实例的start方法中调用setLabelText()
方法,以便它将引用Question类的当前实例。
从而改变了这部分代码:
public static void main(String[] args) {
QuestionClass questionClass = new QuestionClass();
questionClass.setLabelText();
launch(args);
}
public void start(Stage primaryStage) {
Label label = new Label();
// why string value wasn't assigned to string labelText in setLabelText()?
System.out.println("labelText in start(): " + labelText); // OUTPUT: null
label.setText(labelText);
HBox pane = new HBox(label);
Scene scene = new Scene(pane, 100, 100);
primaryStage.setScene(scene);
primaryStage.show();
}
对此:
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) {
Label label = new Label();
//this will call the method on the current instance of your Question class so it will work
setLabelText();
// why string value wasn't assigned to string labelText in setLabelText()?
System.out.println("labelText in start(): " + labelText); // OUTPUT: null
label.setText(labelText);
HBox pane = new HBox(label);
Scene scene = new Scene(pane, 100, 100);
primaryStage.setScene(scene);
primaryStage.show();
}
现在应该可以正常工作,因为它是在当前实例上调用的。