私はJavaでスクリーンマネージャーを書こうとしています - 私が慣れていない言語です。このクラス (ScreenManager) は、クラス タイプを取得してインスタンス化できる必要があります。コードで説明する方が簡単なので、これができるようになりたいです:
ScreenManager manager = new ScreenManager();
manager.setCurrentScreen(MenuScreen.class);
manager.runScreen();
MenuScreen は、JFrame を拡張する Screen というクラスを拡張します。私の考えは、AScreen、BScreen、CScreen などをすべて Screen に拡張して、それらを Screen にキャストし、1 つの型として保存できるようにすることです。
したがって、ScreenManager は次のようになります。
import javax.swing.UIManager;
public class ScreenManager {
private Class<Screen> _currentScreen;
private Screen _currentScreenObject;
public ScreenManager() { }
public ScreenManager(Class<Screen> screen) {
setCurrentScreen(screen);
}
public Class<Screen> getCurrentScreen() {
return _currentScreen;
}
public void setCurrentScreen(Class<Screen> screen) {
_currentScreen = screen;
}
public void runScreen() {
if (_currentScreen == null) return;
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
UIManager.put("swing.boldMetal", Boolean.FALSE);
try {
_currentScreenObject = _currentScreen.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
}
});
}
}
Screen は単純で、AScreen、BScreen などはすべて、コンストラクターの初期化コードです。
import javax.swing.JFrame;
public class Screen extends JFrame {
private static final long serialVersionUID = 1L;
}
私がつまずいているのは、クラスタイプを ScreenManager クラスに渡すことです。
ScreenManager manager = new ScreenManager();
manager.setCurrentScreen(MenuScreen.class);
manager.runScreen();
これで、次のようにキャストできます。
Screen s = new MenuScreen();
しかし、クラス型を渡すことができないようです。私はそれを次のようにキャストしようとしました:
manager.setCurrentScreen((Screen.class)MenuScreen.class);
それはうまくいきません。
参考までに、私は C# のバックグラウンドを持っているので、私の見方は間違っている可能性があります (おそらく間違っています)。もしそうなら、私を修正してください。
ここまで読んでくれてありがとう!