从其他 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();
我有两种形式,两个不同的阶段。 第一个包含刷新表视图的方法,它不能是静态的。 第二种形式包含一个按钮,该按钮应调用一种方法来刷新第一阶段的表格视图。
没有静态函数怎么办?在 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();