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();
    }

时间: 2024-10-14 00:19:51

Libgdx之Window Dialog 窗口和对话框的相关文章

JavaScript之DOM-6 BOM概述 、Window对象(Window对象概述、窗口与对话框、定时器)

一.BOM 概述 BOM 概述 - DHTML 对象模型回顾 BOM 概述 - BOM: Browser Object Model,浏览器对象模型,用来访问和操纵浏览器窗口,使 JavaScript 有能力与浏览器"对话" - 通过使用 BOM,可移动窗口.更改状态栏文本.执行其他不与页面内容发生直接联系的操作 - 没有相关标准,但被广泛支持 BOM 模型 - BOM 模型主要包括如下对象 二.Window 对象概述 Window 对象概述 - window 对象表示浏览器中打开的窗口

WmS详解(二)之如何理解Window和窗口的关系?基于Android7.0源码

上篇博客(WmS详解(一)之token到底是什么?基于Android7.0源码)中我们简要介绍了token的作用,这里涉及到的概念非常多,其中出现频率最高的要数Window和窗口这一对搭档了,那么我们今天就来看看到底我们该如何理解Android系统中的Window和窗口. 窗口这个概念,从不同的角度来看它的含义不一样,如果我们从WmS(WindowManagerService)的角度来看窗口,那么这个窗口并不是一个Window类,而是一个View.用户发来的消息被WmS接收之后并不能直接发给各个

Android_Dialog_设置Dialog窗口的大小

/** * 设置Dialog窗口的大小 */ private void setWindowSize() { DisplayMetrics dm = new DisplayMetrics(); WindowManager m = getWindowManager(); m.getDefaultDisplay().getMetrics(dm); // 为获取屏幕宽.高 WindowManager.LayoutParams p = getWindow().getAttributes(); // 获取对

窗口和对话框居中对齐

Web前端的窗口,对话框等界面,经常需要居中对齐.在Jquery Easyui中等window组件中,通常有宽度width.高度height.距离容器左边的距离left.距离容器顶部的距离top,4个参数. 在实现过程中,主要就是动态或静态设置这4个参数. 当前窗口的高度:$(window).width()当前窗口的宽度:$(window).width() 如果是获得父窗口的,用window.parent就可以了. width:是个方法,不是属性. 下面是一个例子: var windowWidt

iphone绘图的几个基本概念CGPoint、CGSize、CGRect、CGRectMake、window(窗口)、视图(view)

我一般情况下不会使用interface builder去画界面,而是用纯代码去创建界面,不是装B,而是刚从vi转到xcode不久,不太习惯interface builder而已.当然如果需要我也会使用它.一个东西的存在没有绝对的好与坏,只是存在时间与空间决定了它的价值. (忘了讲了,我的环境是xcode4.2)首先要弄懂几个基本的概念. 一)三个结构体:CGPoint.CGSize.CGRect1.  CGPoint [plain] view plaincopy   /* Points. */

windows程序设计获取文本框(窗口、对话框)文本

就是这样一个简单的界面,窗口上重绘的对话框(这种写法参考我之前博文): 需要做到的就是点击确定,获取文本框中内容. // 处理对话框消息 INT_PTR CALLBACK NewDlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) { int ret_num; HWND hwnd; WCHAR buff[32]; switch (msg) { case WM_COMMAND: { switch(LOWORD(wParam)) { c

Binders 与 Window Tokens(窗口令牌)

原文地址:http://www.androiddesignpatterns.com/2013/07/binders-window-tokens.html 安卓的一项核心设计思想是希望能提供一个不需要依赖中央检验部门来检验程序请求的开放平台.为此,Android使用了程序沙盒和Linux的进程分离来防止程序以无法控制和不安全的方式访问系统内部或者其他程序.这种架构是开发者与使用者共同选择的:既不需要额外的保护来防止恶意程序,同时系统要自动的处理好所有事情. 在很长一段时间我对这种安全机制都是知其然

window.open窗口居中和窗口最大化

1.window.open()参数 window.open(pageURL,name,parameters) 其中: pageURL为子窗口路径 name为子窗口句柄 parameters为窗口参数(各参数用逗号分隔),如常用的 'height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no,titlebar=no' (yes/no也可使用1/0,在

安卓使用Dialog创建普通对话框

Activity页面简单所以XML不再写出.下面给出核心代码: button1=(Button)findViewById(R.id.button1); //为按钮设置监听器  button1.setOnClickListener(new OnClickListener() /*在此处使用关键字"new"实例出了一个匿名接口*/{ public void onClick(View v) { Dialog dialog=new Dialog(MainActivity.this);  //使