JavaFX FXML 应用程序中奇怪的可见性问题
Weird visibility issues in a JavaFX FXML app
我正在开发一个简单的对象数据库应用程序,它在 table 中显示 class 中条目的各种属性,并允许用户通过辅助输入添加新条目 window.
主要:
public class Main extends Application {
Stage theStage;
Scene mainWindowController;
@Override
public void start(Stage primaryStage) throws Exception{
theStage = primaryStage;
Parent root = FXMLLoader.load(getClass().getResource("MainWindow.fxml"));
primaryStage.setTitle("Steam Database");
mainWindowController = new Scene(root, 800, 550);
primaryStage.setScene(mainWindowController);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
次要控制器之一 windows:
import static sample.MainWindowController.*;
public class CreateDeveloperWindowController {
/*
*/
@FXML
private TextField newDeveloperNameTextField;
@FXML
private TextField newDeveloperPassTextField;
private void handleCreateDeveloperButton() {
String proposedNewDevName = newDeveloperNameTextField.getText();
String proposedNewDevPass = newDeveloperPassTextField.getText();
if (proposedNewDevName.equals("") || proposedNewDevPass.equals("")) {
mainWindowController.textMessageDisplay.setText("Name and password must not be empty!");
} else {
allDevelopers.add(new Developer(proposedNewDevName, proposedNewDevPass));
}
}
/*
*/
}
问题出在控制器中,在
行中
mainWindowController.textMessageDisplay.setText("Name and password must not be empty!");
我收到一个 "Cannot resolve symbol" 错误,但我不知道为什么。一种解决方案是在其前面添加 "Main." 并声明变量 static
,但这会给我想要添加的其他功能带来问题。所以我的问题是:
为什么还要出现这个? mainWindowController
变量是在 Main
class 中声明的,因此据我所知,它应该在应用程序的任何地方都可见。
我该如何解决这个问题;我如何让这条线路正常工作?
朋友你真的错了,你把实例变量和静态变量搞混了。
无论如何,您需要获得对第一个 class 的引用,这是一个很好的例子
https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx1
我正在开发一个简单的对象数据库应用程序,它在 table 中显示 class 中条目的各种属性,并允许用户通过辅助输入添加新条目 window.
主要:
public class Main extends Application {
Stage theStage;
Scene mainWindowController;
@Override
public void start(Stage primaryStage) throws Exception{
theStage = primaryStage;
Parent root = FXMLLoader.load(getClass().getResource("MainWindow.fxml"));
primaryStage.setTitle("Steam Database");
mainWindowController = new Scene(root, 800, 550);
primaryStage.setScene(mainWindowController);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
次要控制器之一 windows:
import static sample.MainWindowController.*;
public class CreateDeveloperWindowController {
/*
*/
@FXML
private TextField newDeveloperNameTextField;
@FXML
private TextField newDeveloperPassTextField;
private void handleCreateDeveloperButton() {
String proposedNewDevName = newDeveloperNameTextField.getText();
String proposedNewDevPass = newDeveloperPassTextField.getText();
if (proposedNewDevName.equals("") || proposedNewDevPass.equals("")) {
mainWindowController.textMessageDisplay.setText("Name and password must not be empty!");
} else {
allDevelopers.add(new Developer(proposedNewDevName, proposedNewDevPass));
}
}
/*
*/
}
问题出在控制器中,在
行中mainWindowController.textMessageDisplay.setText("Name and password must not be empty!");
我收到一个 "Cannot resolve symbol" 错误,但我不知道为什么。一种解决方案是在其前面添加 "Main." 并声明变量 static
,但这会给我想要添加的其他功能带来问题。所以我的问题是:
为什么还要出现这个?
mainWindowController
变量是在Main
class 中声明的,因此据我所知,它应该在应用程序的任何地方都可见。我该如何解决这个问题;我如何让这条线路正常工作?
朋友你真的错了,你把实例变量和静态变量搞混了。 无论如何,您需要获得对第一个 class 的引用,这是一个很好的例子 https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx1