java - 在对话框中按下确定按钮后更改屏幕
问题描述
在更改屏幕之前,我试图向用户显示带有对话框的成功消息。我希望它等待用户单击确定按钮或按 Enter 键然后更改屏幕。由于我必须在我的程序中放置大量对话框,为了避免重复,我尝试在我的 MainClass 中使用一个 createDialog 方法来创建对话框,并将其添加到我传递给该方法的阶段。但问题是我希望它在用户按下确定按钮后将屏幕更改为我传递给它的屏幕,但对话框的结果函数是一种内部方法,它不访问我传递给函数的屏幕。那么有什么办法可以做到这一点吗?
public class MainClass extends Game {
.
.
.
public void createDialog(String message, boolean isWarning, Stage stage, Screen screen) {
Skin skin2Json = new Skin(Gdx.files.internal("freezing/skin/freezing-ui.json"));
Dialog dialog;
String title = "Success Message";
if (isWarning) title = "Error";
dialog = new Dialog(title, skin2Json, "dialog"){
@Override
protected void result(Object object) {
if((Boolean) object)
//if it is a success message ,I want to set screen to the screen passed to the createDialog function
}
};
dialog.getBackground().setMinWidth(400);
dialog.getBackground().setMinHeight(200);
dialog.text(message);
dialog.button("Ok", true);
dialog.key(Input.Keys.ENTER, true);
dialog.show(stage);
}
}
任何帮助表示赞赏。
解决方案
我猜你可以有不同的方法,但我的方法是:
- 在你的类中使用一个变量,在渲染函数中,触发屏幕的变化
- 在对话框中点击 OK 后设置该变量。
那会给出类似的东西:
public class MainClass extends Game {
private Boolean ChangeScreen = false;
public void render () {
// This is your typical render function
if(ChangeScreen) Game.setscreen(new MyOtherScreen());
}
public void createDialog(String message, boolean isWarning, Stage stage, Screen screen) {
Skin skin2Json = new Skin(Gdx.files.internal("freezing/skin/freezing-ui.json"));
Dialog dialog;
String title = "Success Message";
if (isWarning) title = "Error";
dialog = new Dialog(title, skin2Json, "dialog"){
@Override
protected void result(Object object) {
if((Boolean) object)
// The OK button has been hit
ChangeScreen = true;
}
};
dialog.getBackground().setMinWidth(400);
dialog.getBackground().setMinHeight(200);
dialog.text(message);
dialog.button("Ok", true);
dialog.key(Input.Keys.ENTER, true);
dialog.show(stage);
}
}
也许不是最优雅的方式,但它应该可以解决问题。
推荐阅读
- android - Admob 广告不适用于 android,但可以在统一编辑器中使用
- c - 从 char * 转换为其他兼容对齐的指针类型是否在 C89 中定义了行为?
- next.js - 在 tailwind next.js 上跳过 purgecss 的白名单页面
- ios - 为什么我的功能列表中没有“游戏中心”选项
- stm32 - STM32 安全引导加载程序安全启用始终失败并显示“[SBOOT] 安全问题:执行已停止!”
- c# - 如何实现 TCP 数据传输或串口通信到 asp.net web 应用程序
- c++ - 访问另一个类的 main 中定义的类的实例
- c++ - 当 std::string 变量是全局变量时的不同行为
- c - 了解双免费 mitre.org 示例
- r - 正则表达式匹配其他标签(字符串对)