原文: http://zetcode.com/gui/javagnome/toolbars/

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

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

简单的工具栏

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

toolbar.java

  1. package com.zetcode;
  2. import org.gnome.gdk.Event;
  3. import org.gnome.gtk.Gtk;
  4. import org.gnome.gtk.Orientation;
  5. import org.gnome.gtk.SeparatorToolItem;
  6. import org.gnome.gtk.Stock;
  7. import org.gnome.gtk.ToolButton;
  8. import org.gnome.gtk.Toolbar;
  9. import org.gnome.gtk.VBox;
  10. import org.gnome.gtk.Widget;
  11. import org.gnome.gtk.Window;
  12. import org.gnome.gtk.WindowPosition;
  13. /**
  14. * ZetCode Java Gnome tutorial
  15. *
  16. * This program creates a simple toolbar.
  17. *
  18. * @author jan bodnar
  19. * website zetcode.com
  20. * last modified March 2009
  21. */
  22. public class GToolbar extends Window {
  23. public GToolbar() {
  24. setTitle("Toolbar");
  25. initUI();
  26. connect(new Window.DeleteEvent() {
  27. public boolean onDeleteEvent(Widget source, Event event) {
  28. Gtk.mainQuit();
  29. return false;
  30. }
  31. });
  32. setDefaultSize(300, 250);
  33. setPosition(WindowPosition.CENTER);
  34. showAll();
  35. }
  36. public void initUI() {
  37. Toolbar toolbar = new Toolbar();
  38. ToolButton newtb = new ToolButton(Stock.NEW);
  39. ToolButton opentb = new ToolButton(Stock.OPEN);
  40. ToolButton savetb = new ToolButton(Stock.SAVE);
  41. SeparatorToolItem sep = new SeparatorToolItem();
  42. ToolButton quittb = new ToolButton(Stock.QUIT);
  43. toolbar.insert(newtb, 0);
  44. toolbar.insert(opentb, 1);
  45. toolbar.insert(savetb, 2);
  46. toolbar.insert(sep, 3);
  47. toolbar.insert(quittb, 4);
  48. quittb.connect(new ToolButton.Clicked() {
  49. public void onClicked(ToolButton toolButton) {
  50. Gtk.mainQuit();
  51. }
  52. });
  53. VBox vbox = new VBox(false, 2);
  54. vbox.packStart(toolbar, false, false, 0);
  55. add(vbox);
  56. }
  57. public static void main(String[] args) {
  58. Gtk.init(args);
  59. new GToolbar();
  60. Gtk.main();
  61. }
  62. }

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

  1. Toolbar toolbar = new Toolbar();

Toolbar小部件已创建。

  1. ToolButton newtb = new ToolButton(Stock.NEW);

创建带有库存图像的ToolButton

  1. SeparatorToolItem sep = new SeparatorToolItem();

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

  1. toolbar.insert(newtb, 0);
  2. toolbar.insert(opentb, 1);
  3. ...

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

Java Gnome 中的工具栏 - 图1

图:工具栏

工具栏

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

toolbars.java

  1. package com.zetcode;
  2. import org.gnome.gdk.Event;
  3. import org.gnome.gtk.Gtk;
  4. import org.gnome.gtk.Stock;
  5. import org.gnome.gtk.ToolButton;
  6. import org.gnome.gtk.Toolbar;
  7. import org.gnome.gtk.VBox;
  8. import org.gnome.gtk.Widget;
  9. import org.gnome.gtk.Window;
  10. import org.gnome.gtk.WindowPosition;
  11. /**
  12. * ZetCode Java Gnome tutorial
  13. *
  14. * This program creates two toolbar
  15. * instances.
  16. *
  17. * @author jan bodnar
  18. * website zetcode.com
  19. * last modified March 2009
  20. */
  21. public class GToolbars extends Window {
  22. public GToolbars() {
  23. setTitle("Toolbars");
  24. initUI();
  25. connect(new Window.DeleteEvent() {
  26. public boolean onDeleteEvent(Widget source, Event event) {
  27. Gtk.mainQuit();
  28. return false;
  29. }
  30. });
  31. setDefaultSize(300, 250);
  32. setPosition(WindowPosition.CENTER);
  33. showAll();
  34. }
  35. public void initUI() {
  36. Toolbar upper = new Toolbar();
  37. ToolButton newtb = new ToolButton(Stock.NEW);
  38. ToolButton opentb = new ToolButton(Stock.OPEN);
  39. ToolButton savetb = new ToolButton(Stock.SAVE);
  40. upper.insert(newtb, 0);
  41. upper.insert(opentb, 1);
  42. upper.insert(savetb, 2);
  43. Toolbar lower = new Toolbar();
  44. ToolButton quittb = new ToolButton(Stock.QUIT);
  45. quittb.connect(new ToolButton.Clicked() {
  46. public void onClicked(ToolButton toolButton) {
  47. Gtk.mainQuit();
  48. }
  49. });
  50. lower.insert(quittb, 0);
  51. VBox vbox = new VBox(false, 2);
  52. vbox.packStart(upper, false, false, 0);
  53. vbox.packStart(lower, false, false, 0);
  54. add(vbox);
  55. }
  56. public static void main(String[] args) {
  57. Gtk.init(args);
  58. new GToolbars();
  59. Gtk.main();
  60. }
  61. }

该应用显示两个工具栏。

  1. Toolbar upper = new Toolbar();
  2. ...
  3. Toolbar lower = new Toolbar();

我们创建两个Toolbar小部件。

  1. upper.insert(newtb, 0);
  2. ...
  3. lower.insert(quittb, 0);

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

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

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

Java Gnome 中的工具栏 - 图2

图:工具栏 s

撤销重做

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

undoredo.java

  1. package com.zetcode;
  2. import org.gnome.gdk.Event;
  3. import org.gnome.gtk.Gtk;
  4. import org.gnome.gtk.Label;
  5. import org.gnome.gtk.SeparatorToolItem;
  6. import org.gnome.gtk.Stock;
  7. import org.gnome.gtk.ToolButton;
  8. import org.gnome.gtk.Toolbar;
  9. import org.gnome.gtk.VBox;
  10. import org.gnome.gtk.Widget;
  11. import org.gnome.gtk.Window;
  12. import org.gnome.gtk.WindowPosition;
  13. /**
  14. * ZetCode Java Gnome tutorial
  15. *
  16. * This program creates an undo redo
  17. * example. It shows how to enable/disable
  18. * tool buttons if they cannot be used no
  19. * more.
  20. *
  21. * @author jan bodnar
  22. * website zetcode.com
  23. * last modified March 2009
  24. */
  25. public class GUndoRedo extends Window {
  26. private int count = 2;
  27. private ToolButton undo;
  28. private ToolButton redo;
  29. public GUndoRedo() {
  30. setTitle("Undo redo");
  31. initUI();
  32. connect(new Window.DeleteEvent() {
  33. public boolean onDeleteEvent(Widget source, Event event) {
  34. Gtk.mainQuit();
  35. return false;
  36. }
  37. });
  38. setDefaultSize(300, 250);
  39. setPosition(WindowPosition.CENTER);
  40. showAll();
  41. }
  42. public void initUI() {
  43. Toolbar toolbar = new Toolbar();
  44. undo = new ToolButton(Stock.UNDO);
  45. redo = new ToolButton(Stock.REDO);
  46. SeparatorToolItem sep = new SeparatorToolItem();
  47. ToolButton quit = new ToolButton(Stock.QUIT);
  48. toolbar.insert(undo, 0);
  49. toolbar.insert(redo, 1);
  50. toolbar.insert(sep, 2);
  51. toolbar.insert(quit, 3);
  52. undo.connect(new ToolButton.Clicked() {
  53. public void onClicked(ToolButton toolButton) {
  54. count -= 1;
  55. if (count <= 0) {
  56. undo.setSensitive(false);
  57. redo.setSensitive(true);
  58. }
  59. }
  60. });
  61. redo.connect(new ToolButton.Clicked() {
  62. public void onClicked(ToolButton toolButton) {
  63. count += 1;
  64. if (count >= 5) {
  65. redo.setSensitive(false);
  66. undo.setSensitive(true);
  67. }
  68. }
  69. });
  70. quit.connect(new ToolButton.Clicked() {
  71. public void onClicked(ToolButton toolButton) {
  72. Gtk.mainQuit();
  73. }
  74. });
  75. VBox vbox = new VBox(false, 2);
  76. vbox.packStart(toolbar, false, false, 0);
  77. vbox.packStart(new Label(""), false, false, 0);
  78. add(vbox);
  79. }
  80. public static void main(String[] args) {
  81. Gtk.init(args);
  82. new GUndoRedo();
  83. Gtk.main();
  84. }
  85. }

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

  1. private int count = 2;

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

  1. undo = new ToolButton(Stock.UNDO);
  2. redo = new ToolButton(Stock.REDO);

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

  1. undo.connect(new ToolButton.Clicked() {
  2. public void onClicked(ToolButton toolButton) {
  3. count -= 1;
  4. if (count <= 0) {
  5. undo.setSensitive(false);
  6. redo.setSensitive(true);
  7. }
  8. }
  9. });

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

Java Gnome 中的工具栏 - 图3

图:撤销和重做

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