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

时间:2015-03-04 09:18:43

标签: static javafx java-8 fxml

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

如果没有静态功能怎么办?在java 1.8中我们不能将静态用于FXML对象。 : - /

这是第一个代表第一个根形式的类:

  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
        );}

这是第二类

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

有什么想法吗? 谢谢

3 个答案:

答案 0 :(得分:1)

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

你的第一堂课看起来像那样:

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.
}

在第二节课中:

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

答案 1 :(得分:0)

你必须得到FXML的控制器。只需2步即可加载Fxml。 首先你得到装载机。加载程序可以加载FXML并为您提供控制器。有了它,您可以从FXML控制器调用所有公共方法。

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

答案 2 :(得分:-1)

默认情况下,这个问题在任何目的下都很常见。

如果我说得对,你只想在class2中调用class1中的方法。 尊重复杂性有几种可能的解决方案:

最简单,也许最好的情况是在class2中创建class1的实例。

Class1 instance = new Class1();

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

instance.seznamDokumentu();

希望有所帮助;)