我有两种形式,两个不同的阶段。 第一个包含刷新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()
}
有什么想法吗? 谢谢
答案 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();
希望有所帮助;)