【发布时间】:2019-06-19 02:26:39
【问题描述】:
我想创建一个最终类,只有静态方法——不需要这个类的实例——它应该是一个静态容器。这个类应该有一个包含 created scenes 的地图字段。现在的问题是 - 方法 getClass() 不是静态的,我不能将它包含在我的静态初始化程序块中。有没有不使用非静态方法从 FXML 文件创建场景的方法?
代码如下:
package gui;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import java.util.Map;
import java.util.TreeMap;
public class ViewManager {
/**
* Class containing constant height and width of the window.
*/
public static final class Bounds{
public static final int HEIGHT = 800;
public static final int WIDTH = 800;
}
/**
* Enum class containing paths to following scenes.
*/
public enum SceneName{
LOGIN_VIEW("/login_view.fxml"),
MAIN_VIEW("/main_view.fxml");
private String path;
SceneName(String path) {
this.path = path;
}
@Override
public String toString() {
return path;
}
}
private static Map<SceneName, Scene> sceneContainer;
static{
sceneContainer = new TreeMap<>();
for(SceneName sceneName : SceneName.values()) {
//here is the non-static reference
Parent root = FXMLLoader.load(getClass().getResource(SceneName.LOGIN_VIEW.toString()));
sceneContainer.put(SceneName.LOGIN_VIEW, new Scene(root, Bounds.HEIGHT, Bounds.WIDTH));
}
}
public static Map<SceneName, Scene> getSceneContainer() {
return sceneContainer;
}
}
【问题讨论】:
-
ViewManager.class.getResource(..) 应该可以工作。但是为什么你想要一个静态类呢?单身人士是..邪恶的,通常;)
-
为什么是静态的?有了这个,我可以轻松地在任何类的场景之间切换,例如通过按下按钮,或者当我的线程被中断等时。:)
标签: javafx static scene initializer