# Java Gnome 中的对话框

> 原文： [http://zetcode.com/gui/javagnome/dialogs/](http://zetcode.com/gui/javagnome/dialogs/)

在 Java Gnome 编程教程的这一部分中，我们将介绍对话框。

对话框窗口或对话框是大多数现代 GUI 应用必不可少的部分。 对话被定义为两个或更多人之间的对话。 在计算机应用中，对话框是一个窗口，用于与应用“对话”。 对话框用于输入数据，修改数据，更改应用设置等。对话框是用户与计算机程序之间进行通信的重要手段。

## `MessageDialog`

消息对话框是方便的对话框，可向应用的用户提供消息。 该消息包含文本和图像数据。

`messages.java`

```java
package com.zetcode;

import org.gnome.gdk.Event;
import org.gnome.gtk.Button;
import org.gnome.gtk.ButtonsType;
import org.gnome.gtk.Gtk;
import org.gnome.gtk.MessageDialog;
import org.gnome.gtk.MessageType;
import org.gnome.gtk.Table;
import org.gnome.gtk.Widget;
import org.gnome.gtk.Window;
import org.gnome.gtk.WindowPosition;

/**
 * Java Gnome tutorial
 *
 * This program shows four
 * message dialogs.
 *
 * @author jan bodnar
 * website zetcode.com
 * last modified March 2009
 */

public class GMessages extends Window {

    Window parent;

    public GMessages() {

        setTitle("GMessages");

        initUI();

        parent = this;

        connect(new Window.DeleteEvent() {
            public boolean onDeleteEvent(Widget source, Event event) {
                Gtk.mainQuit();
                return false;
            }
        });

        setDefaultSize(250, 100);
        setPosition(WindowPosition.CENTER);
        showAll();
    }

    public void initUI() {

        Table table = new Table(2, 2, true);

        Button info = new Button("Information");
        Button warn = new Button("Warning");
        Button ques = new Button("Question");
        Button erro = new Button("Error");

        info.connect(new Button.Clicked() {

            public void onClicked(Button button) {
                MessageDialog md = new MessageDialog(null, true,
                     MessageType.INFO, 
                    ButtonsType.CLOSE, "Download completed");
                md.setPosition(WindowPosition.CENTER);
                md.run();
                md.hide();
            }
        });

        warn.connect(new Button.Clicked() {

            public void onClicked(Button button) {
                MessageDialog md = new MessageDialog(parent, true,
                    MessageType.WARNING, 
                    ButtonsType.CLOSE, "Unallowed operation");
                md.setPosition(WindowPosition.CENTER);
                md.run();
                md.hide();
            }
        });

        ques.connect(new Button.Clicked() {

            public void onClicked(Button button) {
                MessageDialog md = new MessageDialog(null, true,
                    MessageType.QUESTION, 
                    ButtonsType.CLOSE, "Are you sure to quit?");
                md.setPosition(WindowPosition.CENTER);
                md.run();
                md.hide();
            }
        });

        erro.connect(new Button.Clicked() {
            public void onClicked(Button button) {
                MessageDialog md = new MessageDialog (null, true, 
                    MessageType.ERROR, 
                    ButtonsType.CLOSE, "Error loading file");
                md.setPosition(WindowPosition.CENTER);
                md.run();
                md.hide();
            }            
         });

        table.attach(info, 0, 1, 0, 1);
        table.attach(warn, 1, 2, 0, 1);
        table.attach(ques, 0, 1, 1, 2);
        table.attach(erro, 1, 2, 1, 2);

        add(table);
    }

    public static void main(String[] args) {
        Gtk.init(args);
        new GMessages();
        Gtk.main();
    }
}

```

在我们的示例中，我们将显示四种消息对话框。 信息，警告，问题和错误消息对话框。

```java
Button info = new Button("Information");
Button warn = new Button("Warning");
Button ques = new Button("Question");
Button erro = new Button("Error");

```

我们有四个按钮。 这些按钮中的每个按钮都会显示不同类型的消息对话框。

```java
info.connect(new Button.Clicked() {

    public void onClicked(Button button) {
    MessageDialog md = new MessageDialog(null, true,
      MessageType.INFO, 
        ButtonsType.CLOSE, "Download completed");
    md.setPosition(WindowPosition.CENTER);
    md.run();
    md.hide();
    }
});

```

如果单击信息按钮，将显示“信息”对话框。 `MessageType.INFO`指定对话框的类型。 `ButtonsType.CLOSE`指定要在对话框中显示的按钮。 最后一个参数是已分发的消息。 该对话框使用`run()`方法显示。 `hide()`方法隐藏对话框。

![Information message dialog](img/7851228aa57a3363aee60211c7f74902.jpg)

![Warning message dialog](img/4eb21ef662a960a521477d98ea89f704.jpg)

![Question message dialog](img/4a714814c60d2ebdc644ca9fd233434d.jpg)

![Error message dialog](img/0e15c580edf7dabfe4bf12f5515909cf.jpg)

## `AboutDialog`

`AboutDialog`显示有关应用的信息。 `AboutDialog`可以显示徽标，应用名称，版本，版权或许可信息。 也可以给作者或翻译者以荣誉。

`aboutdialog.java`

```java
package com.zetcode;

import java.io.FileNotFoundException;

import org.gnome.gdk.Event;
import org.gnome.gdk.Pixbuf;
import org.gnome.gtk.AboutDialog;
import org.gnome.gtk.Button;
import org.gnome.gtk.Fixed;
import org.gnome.gtk.Gtk;
import org.gnome.gtk.Widget;
import org.gnome.gtk.Window;
import org.gnome.gtk.WindowPosition;

public class GAboutDialog extends Window implements Button.Clicked {

    Pixbuf logo;

    public GAboutDialog() {

        setTitle("AboutDialog");

        initUI();

        connect(new Window.DeleteEvent() {
            public boolean onDeleteEvent(Widget source, Event event) {
                Gtk.mainQuit();
                return false;
            }
        });

        setDefaultSize(250, 200);
        setPosition(WindowPosition.CENTER);
        showAll();
    }

    public void initUI() {

        try {
            logo = new Pixbuf("battery.png");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        Button button = new Button("About");
        button.connect(this);

        Fixed fix = new Fixed();
        fix.put(button, 20, 20);
        add(fix);

    }

    public void onClicked(Button button) {
        AboutDialog about = new AboutDialog();
        about.setProgramName("Battery");
        about.setVersion("0.1");
        about.setCopyright("(c) Jan Bodnar");
        about.setComments("Battery is a simple tool for battery checking");
        about.setLogo(logo);
        about.setPosition(WindowPosition.CENTER);
        about.run();
        about.hide();
    }

    public static void main(String[] args) {
        Gtk.init(args);
        new GAboutDialog();
        Gtk.main();
    }
}

```

该代码示例使用具有某些功能的`AboutDialog`。

```java
AboutDialog about = new AboutDialog();

```

我们创建一个`AboutDialog`。

```java
about.setProgramName("Battery");
about.setVersion("0.1");
about.setCopyright("(c) Jan Bodnar");

```

我们设置名称，版本和版权。

```java
about.setLogo(logo);

```

此行创建徽标。

![AboutDialog](img/c2c6088d56a343fa48453ab1aee7052a.jpg)

图：`AboutDialog`

在 Java Gnome 教程的这一部分中，我们介绍了对话框。