JavaFX FXML应用程序中的奇怪可见性问题

JavaFX FXML应用程序中的奇怪可见性问题,java,javafx,fxml,scene,Java,Javafx,Fxml,Scene,我正在开发一个简单的对象数据库应用程序,它在一个表中显示类中条目的各种属性,并允许用户通过辅助输入窗口添加新条目 主要内容: 一个辅助窗口的控制器: import static sample.MainWindowController.*; public class CreateDeveloperWindowController { /* */ @FXML private TextField newDeveloperNameTextField; @FXML private TextField

我正在开发一个简单的对象数据库应用程序,它在一个表中显示类中条目的各种属性,并允许用户通过辅助输入窗口添加新条目

主要内容:

一个辅助窗口的控制器:

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!");
我得到了一个“无法解决符号”的错误,但我不明白为什么。一种解决方案是在其前面添加“Main.”并声明变量
static
,但这会给我要添加的其他功能带来问题。因此,我的问题是:

  • 为什么会出现这种情况?
    mainWindowController
    变量是在
    Main
    类中声明的,因此据我所知,它应该在应用程序中的任何位置都可见

  • 我如何解决这个问题;我怎样才能让那条线工作


  • 你真的错了,我的朋友,你把实例变量和静态变量搞混了。 无论如何,您需要获得对第一个类的引用,下面是一个很好的示例
    CreatedeveloperIndowController
    中没有定义名为
    mainWindowController
    的变量,因此您会收到错误。但是CreatedeveloperIndowController不应该在主类中看到它吗?即使我导入它,也会出现“非静态变量不能从静态上下文引用”错误,这只能通过声明变量静态来解决,这导致了我在问题中提到的问题-它不能是静态的,因为它妨碍了我将要添加的其他内容“但是CreatedeveloperIndowController不应该在主类中看到它吗?”不,为什么它会看到它?这根本不是Java(或者我知道的任何其他语言)的工作方式。至于你的第二个问题:“我如何让这一行工作?”“,不太清楚你想做什么。即使编译器可以神奇地推断出
    mainWindowController
    属于哪个对象,并解析变量,您也可以在
    Main
    中声明它属于
    Scene
    类型,并且
    Scene
    没有名为
    textMessageDisplay
    的公共字段。看起来你对什么是类和对象以及它们是如何工作的有一些主要的误解。在尝试进入JavaFX之前,您可能需要退一步学习一些基础知识。
    static
    import导入
    static
    类的成员。要引用类的非静态字段,需要包含该字段的实例。。。如何将此实例传递给
    createdeveloperIndowController
    在这里的答案中有详细描述
    mainWindowController.textMessageDisplay.setText("Name and password must not be empty!");