# Java Gnome 中的工具栏

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

在 Java Gnome 编程教程的这一部分中，我们将使用工具栏。

菜单将我们可以在应用中使用的命令分组。 使用工具栏可以快速访问最常用的命令。

## 简单的工具栏

接下来，我们创建一个简单的工具栏。

`toolbar.java`

```java
package com.zetcode;

import org.gnome.gdk.Event;
import org.gnome.gtk.Gtk;
import org.gnome.gtk.Orientation;
import org.gnome.gtk.SeparatorToolItem;
import org.gnome.gtk.Stock;
import org.gnome.gtk.ToolButton;
import org.gnome.gtk.Toolbar;
import org.gnome.gtk.VBox;
import org.gnome.gtk.Widget;
import org.gnome.gtk.Window;
import org.gnome.gtk.WindowPosition;

/**
 * ZetCode Java Gnome tutorial
 *
 * This program creates a simple toolbar.
 *
 * @author jan bodnar
 * website zetcode.com
 * last modified March 2009
 */

public class GToolbar extends Window {

    public GToolbar() {
        setTitle("Toolbar");

        initUI();

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

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

    public void initUI() {

        Toolbar toolbar = new Toolbar();

        ToolButton newtb = new ToolButton(Stock.NEW);
        ToolButton opentb = new ToolButton(Stock.OPEN);
        ToolButton savetb = new ToolButton(Stock.SAVE);
        SeparatorToolItem sep = new SeparatorToolItem();
        ToolButton quittb = new ToolButton(Stock.QUIT);

        toolbar.insert(newtb, 0);
        toolbar.insert(opentb, 1);
        toolbar.insert(savetb, 2);
        toolbar.insert(sep, 3);
        toolbar.insert(quittb, 4);

        quittb.connect(new ToolButton.Clicked() {

            public void onClicked(ToolButton toolButton) {
                Gtk.mainQuit();
            }
        });

        VBox vbox = new VBox(false, 2);
        vbox.packStart(toolbar, false, false, 0);

        add(vbox);
    }

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

```

该示例显示了一个工具栏和四个工具按钮。

```java
Toolbar toolbar = new Toolbar();

```

`Toolbar`小部件已创建。

```java
ToolButton newtb = new ToolButton(Stock.NEW);

```

创建带有库存图像的`ToolButton`。

```java
SeparatorToolItem sep = new SeparatorToolItem();

```

这是一个分隔符。 它可以用于将工具栏按钮分成逻辑组。

```java
toolbar.insert(newtb, 0);
toolbar.insert(opentb, 1);
...

```

工具栏按钮插入到工具栏小部件中。

![Toolbar](img/234569e35ab42c0704a5b28f490499b8.jpg)

图：工具栏

## 工具栏

在第二个示例中，我们显示了两个工具栏。 许多应用具有多个工具栏。 我们展示了如何在 Java Gnome 中做到这一点。

`toolbars.java`

```java
package com.zetcode;

import org.gnome.gdk.Event;
import org.gnome.gtk.Gtk;
import org.gnome.gtk.Stock;
import org.gnome.gtk.ToolButton;
import org.gnome.gtk.Toolbar;
import org.gnome.gtk.VBox;
import org.gnome.gtk.Widget;
import org.gnome.gtk.Window;
import org.gnome.gtk.WindowPosition;

/**
 * ZetCode Java Gnome tutorial
 *
 * This program creates two toolbar
 * instances.
 *
 * @author jan bodnar
 * website zetcode.com
 * last modified March 2009
 */

public class GToolbars extends Window {

    public GToolbars() {
        setTitle("Toolbars");

        initUI();

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

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

    public void initUI() {

        Toolbar upper = new Toolbar();

        ToolButton newtb = new ToolButton(Stock.NEW);
        ToolButton opentb = new ToolButton(Stock.OPEN);
        ToolButton savetb = new ToolButton(Stock.SAVE);

        upper.insert(newtb, 0);
        upper.insert(opentb, 1);
        upper.insert(savetb, 2);

        Toolbar lower = new Toolbar();

        ToolButton quittb = new ToolButton(Stock.QUIT);

        quittb.connect(new ToolButton.Clicked() {

            public void onClicked(ToolButton toolButton) {
                Gtk.mainQuit();
            }
        });

        lower.insert(quittb, 0);

        VBox vbox = new VBox(false, 2);
        vbox.packStart(upper, false, false, 0);
        vbox.packStart(lower, false, false, 0);

        add(vbox);
    }

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

```

该应用显示两个工具栏。

```java
Toolbar upper = new Toolbar();
...
Toolbar lower = new Toolbar();

```

我们创建两个`Toolbar`小部件。

```java
upper.insert(newtb, 0);
...       
lower.insert(quittb, 0);

```

它们每个都有自己的工具按钮。

```java
VBox vbox = new VBox(false, 2);
vbox.packStart(upper, false, false, 0);
vbox.packStart(lower, false, false, 0);

```

工具栏一个接一个地包装在垂直盒中。

![Toolbars](img/d5c7ed8e4921509669e7222d4a40ae0a.jpg)

图：工具栏 s

## 撤销重做

以下示例演示了如何停用工具栏上的工具栏按钮。 这是 GUI 编程中的常见做法。 例如，保存按钮。 如果我们将文档的所有更改都保存到磁盘上，则在大多数文本编辑器中，“保存”按钮将被禁用。 这样，应用会向用户指示所有更改都已保存。

`undoredo.java`

```java
package com.zetcode;

import org.gnome.gdk.Event;
import org.gnome.gtk.Gtk;
import org.gnome.gtk.Label;
import org.gnome.gtk.SeparatorToolItem;
import org.gnome.gtk.Stock;
import org.gnome.gtk.ToolButton;
import org.gnome.gtk.Toolbar;
import org.gnome.gtk.VBox;
import org.gnome.gtk.Widget;
import org.gnome.gtk.Window;
import org.gnome.gtk.WindowPosition;

/**
 * ZetCode Java Gnome tutorial
 *
 * This program creates an undo redo 
 * example. It shows how to enable/disable
 * tool buttons if they cannot be used no
 * more.
 *
 * @author jan bodnar
 * website zetcode.com
 * last modified March 2009
 */

public class GUndoRedo extends Window {

    private int count = 2;
    private ToolButton undo;
    private ToolButton redo;

    public GUndoRedo() {

        setTitle("Undo redo");

        initUI();

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

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

    public void initUI() {
        Toolbar toolbar = new Toolbar();

        undo = new ToolButton(Stock.UNDO);
        redo = new ToolButton(Stock.REDO);
        SeparatorToolItem sep = new SeparatorToolItem();
        ToolButton quit = new ToolButton(Stock.QUIT);

        toolbar.insert(undo, 0);
        toolbar.insert(redo, 1);
        toolbar.insert(sep, 2);
        toolbar.insert(quit, 3);

        undo.connect(new ToolButton.Clicked() {

            public void onClicked(ToolButton toolButton) {
                count -= 1;

                if (count <= 0) {
                    undo.setSensitive(false);
                    redo.setSensitive(true);
                }
            }
        });

        redo.connect(new ToolButton.Clicked() {

            public void onClicked(ToolButton toolButton) {
                count += 1;

                if (count >= 5) {
                    redo.setSensitive(false);
                    undo.setSensitive(true);
                }
            }
        });

        quit.connect(new ToolButton.Clicked() {

            public void onClicked(ToolButton toolButton) {
                Gtk.mainQuit();
            }
        });

        VBox vbox = new VBox(false, 2);
        vbox.packStart(toolbar, false, false, 0);
        vbox.packStart(new Label(""), false, false, 0);

        add(vbox);

    }

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

```

我们的示例从 Java Gnome 库存资源创建撤消和重做按钮。 单击几下后，每个按钮均被禁用。 按钮显示为灰色。

```java
private int count = 2;

```

`count`变量决定哪个按钮被激活和禁用。

```java
undo = new ToolButton(Stock.UNDO);
redo = new ToolButton(Stock.REDO);

```

我们有两个工具按钮。 撤消和重做工具按钮。 图片来自库存资源。

```java
undo.connect(new ToolButton.Clicked() {
    public void onClicked(ToolButton toolButton) {
         count -= 1;
         if (count <= 0) {
             undo.setSensitive(false);
             redo.setSensitive(true);
         }
     }
 });

```

我们为撤消工具按钮插入`Clicked`事件的方法。 要激活/禁用小部件，我们使用`setSensitive()`方法。

![Undo redo](img/dc8b21d8a4791c02735a38335798732a.jpg)

图：撤销和重做

在 Java Gnome 编程库的这一章中，我们提到了工具栏。