Libgdx之Window Dialog 窗口和对话框

Posted zqiang_55

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Libgdx之Window Dialog 窗口和对话框相关的知识,希望对你有一定的参考价值。

Libgdx提供了窗口类(Window)让开发者对用户进行提示,或者进行一些输入操作。
Window可以点击标题进行拖动,也可以设置为Modal模式。preferred size是由标题文字和里面装载的Actor共同决定的,当调用pack方法时会重新计算大小。
Dialog extends Window, Dialog是一个模式窗口(Modal Window),提供了content table和button table,很方便的往Dialog找那个添加文字。当点击button时,会调用result方法,而且Dialog会自动消失

下面是代码时间,大家自己运行一下代码就可以看到效果:

    Window window;
    Dialog dialog;

    TextButton tbOk, tbCancel;

    Stage stage;
    Skin skin;

    @Override
    public void create() 
        stage = new Stage();
        Gdx.input.setInputProcessor(stage);
        skin = new Skin(Gdx.files.internal("uiskin.json"));

        window = new Window("WindowTest", skin);
        // 默认文字是在左边显示,需要手动设置居中
        window.getTitleLabel().setAlignment(Align.center);
        // 默认window的位置是在左下角,需重新设置
        window.setX(Gdx.graphics.getWidth() / 2 - window.getWidth() /2 );
        window.setY(Gdx.graphics.getHeight() / 2 - window.getHeight() / 2);
        // 拖动TitleLabel,window会移动
        window.setMovable(false);

        tbOk = new TextButton("OK", skin);
        tbCancel = new TextButton("CANCEL", skin);
        tbOk.setSize(tbCancel.getPrefWidth(), tbCancel.getPrefHeight());
        tbCancel.addListener(new ClickListener() 

            @Override
            public void clicked(InputEvent event, float x, float y) 
                window.setVisible(false);
            

        );
        tbOk.addListener(new ClickListener() 

            @Override
            public void clicked(InputEvent event, float x, float y) 
                Gdx.app.log("TAG", "dialog ok button is clicked");
            

        );
        tbOk.setX(window.getPrefWidth() / 2 - tbOk.getWidth() / 2 - 10);
        tbOk.setY(10);
        tbCancel.setX(window.getWidth() / 2 + 10);
        tbCancel.setY(10);
        // 这个地方用addActor方法,不能使用add方法,后面将讲解Table的时候会涉及到
        window.addActor(tbOk);
        window.addActor(tbCancel);
        Gdx.app.log("TAG", "window preWidth=" + window.getPrefWidth() + "window width=" + window.getWidth());
//      window.pack();
        stage.addActor(window);

        dialog = new Dialog("DialogTest", skin, "dialog");
        dialog.getTitleLabel().setAlignment(Align.center);
        // 这样无法获得OK事件
        // 往Dialog里面添加文字信息(Label形式)
        dialog.text("This is Test information");
        // 往Dialog里面添加按钮(Button形式),点击按钮后Dialog自动消失
//      dialog.button("OK", true).addListener(new ClickListener() 
//
//          @Override
//          public void clicked(InputEvent event, float x, float y) 
//              Gdx.app.log("TAG", "dialog ok button is clicked");
//          
//          
//      );
        // 这个方法和上面方法的效果一样
        dialog.button(tbOk);

        dialog.setMovable(false);
        stage.addActor(dialog);
    

    @Override
    public void render() 
        Gdx.gl.glClearColor(0.39f, 0.58f, 0.92f, 1.0f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        stage.act();
        stage.draw();
    

    @Override
    public void dispose() 
        stage.dispose();
        skin.dispose();
    

以上是关于Libgdx之Window Dialog 窗口和对话框的主要内容,如果未能解决你的问题,请参考以下文章

Qt文档阅读Window and Dialog Widgets

Qt::WindowFlags枚举类型(对Qt::Widget Qt::Window Qt::Dialog分别讲解,其中Qt::Widget是两用的,如新的窗口部件没有父窗口部件,则它是一个独立的窗口

QT之WindowFlags属性详解

QT之WindowFlags属性详解

Android之Dialog提示Unable to add window -- token is not valid; is your activity running?

Android之Dialog提示Unable to add window -- token is not valid; is your activity running?