从其他 class 调用非静态方法 - JavaFX

call non static method from other class - JavaFX

我有两种形式,两个不同的阶段。 第一个包含刷新表视图的方法,它不能是静态的。 第二种形式包含一个按钮,该按钮应调用一种方法来刷新第一阶段的表格视图。

没有静态函数怎么办?在 java 1.8 中,我们不能对 FXML 对象使用静态。 :-/

这是第一个class,表示第一个词根形式:

  public  void seznamDokumentu() throws ClassNotFoundException, SQLException, IOException {
        int pocetPriloh = 0;
        System.out.println("start seznam dokumentu!");

        idSoucinnosti.setVisible(nastaveniZobrazTlacitkoSoucinnosti);
        idTable.setEditable(true);
        idTable.setStyle("-fx-control-inner-background: #" + nastaveniBarvaVybrany
                + "; -fx-accent: derive(-fx-control-inner-background, -40%)"
                + "; -fx-cell-hover-color: derive(-fx-control-inner-background, -20%)"
//and other actions for refreshing
        );}

这是第二个class

    private static void aktualizuj() throws ClassNotFoundException, SQLException, IOException {
//something for call seznamDokumentu()
    }

有什么想法吗? 谢谢

看起来是第一个 class 使用 Singleton 的完美案例。 这样,您将获得对第一个 class 实例的引用,该实例可用于从其他 classes 调用非静态方法。

你的第一个 class 看起来像这样:

public class ClassA {
    private static ClassA instance = null;
    private ClassA(){} //private constructor;

    public static getInstance() {
        if(instance == null) instance = new ClassA();
        return instance;
    }
    public void seznamDokumentu() {} //etc.
}

在第二个 class:

private static void aktualizuj() throws ClassNotFoundException, SQLException, IOException {
ClassA.getInstance().seznamDokumentu();
}

默认情况下,我猜这个问题对于任何一种目的都很常见。

如果我没看错,您只是想在 class2 中调用 class1 的方法。 考虑到复杂性,有几种可能的解决方案:

最简单,也可能是最好的方法是在 class2 中创建 class1 的实例。

Class1 instance = new Class1();

然后您可以通过以下方式轻松访问它的非静态方法:

instance.seznamDokumentu();

希望对您有所帮助 ;)

您必须获得 FXML 的控制器。只需分两步加载 Fxml。 首先你只得到装载机。加载程序可以加载 FXML 并为您提供它的控制器。这样您就可以从 FXML 控制器调用所有 public 方法。

FXMLLoader loader = new FXMLLoader(this.getClass().getResource("Example.fxml"));
Parent root = (Parent) loader.load();
YourController controller = loader.getController();
controller.yourRefreshMethod();