企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Java Gnome 中的小部件 > 原文: [http://zetcode.com/gui/javagnome/widgets/](http://zetcode.com/gui/javagnome/widgets/) 在 Java Gnome 编程教程的这一部分中,我们将介绍一些小部件。 小部件是 GUI 应用的基本构建块。 多年来,几个小部件已成为所有 OS 平台上所有工具包中的标准。 例如,按钮,复选框或滚动条。 GTK+ 工具箱的理念是将小部件的数量保持在最低水平。 将创建更多专门的小部件作为自定义小部件。 ## `Label` `Label`小部件显示文本。 `label.java` ```java package com.zetcode; import org.gnome.gdk.Event; import org.gnome.gtk.Gtk; import org.gnome.gtk.Label; import org.gnome.gtk.Widget; import org.gnome.gtk.Window; import org.gnome.gtk.WindowPosition; /** * ZetCode Java Gnome tutorial * * This program uses Label widget * to display text. * * @author jan bodnar * website zetcode.com * last modified March 2009 */ public class GLabel extends Window { public GLabel() { setTitle("Death song"); initUI(); connect(new Window.DeleteEvent() { public boolean onDeleteEvent(Widget source, Event event) { Gtk.mainQuit(); return false; } }); setPosition(WindowPosition.CENTER); showAll(); } public void initUI() { Label lyrics = new Label("Lets sing the death song kids\n\n" + "We light a candle on an earth\n" + "We made into hell\n" + "And pretend that were in heaven\n" + "Each time we do we get\n" + "The blind mans ticket\n" + "And we know that nothings true\n" + "I saw priest kill a cop on the tv\n" + "And I know now theyre our heroes too\n\n" + "We sing the death song kids\n" + "Because weve got no future\n" + "And we want to be just like you\n" + "And we want to be just like you\n"); add(lyrics); setBorderWidth(8); } public static void main(String[] args) { Gtk.init(args); new GLabel(); Gtk.main(); } } ``` 该代码示例在窗口上显示了一些歌词。 ```java Label lyrics = new Label("Lets sing the death song kids\n\n" + "We light a candle on an earth\n" + ... ``` 这是我们将在`Label`小部件中显示的文本。 ```java setBorderWidth(8); ``` `Label`周围有一些空白。 ![Label Widget](https://img.kancloud.cn/63/95/63952a419cfd41387dc51017ff86452b_260x281.jpg) 图:`Label`小部件 ## `HSeparator` `HSeparator`是一个装饰小部件,可用于分隔窗口上的项目。 `separator.java` ```java package com.zetcode; import org.gnome.gdk.Event; import org.gnome.gtk.Gtk; import org.gnome.gtk.HSeparator; import org.gnome.gtk.Label; import org.gnome.gtk.VBox; import org.gnome.gtk.Widget; import org.gnome.gtk.Window; import org.gnome.gtk.WindowPosition; /** * Java Gnome tutorial * * This program shows how to use * a horizontal separator. * * @author jan bodnar * website zetcode.com * last modified March 2009 */ public class GHSeparator extends Window { private final int VERTICAL_SPACE = 15; private final int BORDER_AROUND = 25; private final float Y_ALIGN = 0f; private final float X_ALIGN = 0f; public GHSeparator() { setTitle("HSeparator"); initUI(); connect(new Window.DeleteEvent() { public boolean onDeleteEvent(Widget source, Event event) { Gtk.mainQuit(); return false; } }); setPosition(WindowPosition.CENTER); showAll(); } public void initUI() { VBox vbox = new VBox(false, VERTICAL_SPACE); Label zinc = new Label("Zinc is a moderately reactive, blue" + "gray metal that tarnishes in moist air and burns in air of zinc " + "oxide. It reacts with acids, alkalis and other non-metals. If not" + "completely pure, zinc reacts with dilute acids to release hydrogen."); zinc.setLineWrap(true); zinc.setAlignment(X_ALIGN, Y_ALIGN); vbox.packStart(zinc); HSeparator hsep = new HSeparator(); vbox.packStart(hsep); Label copper = new Label("Copper is an essential trace nutrient to" + "all high plants and animals. In animals, including humans," + "it is found primarily in the bloodstream, as a co-factor in various" + "enzymes, and in copper-based pigments. However, in sufficient" + "amounts, copper can be poisonous and even fatal to organisms."); copper.setAlignment(X_ALIGN, Y_ALIGN); copper.setLineWrap(true); vbox.packStart(copper); add(vbox); setResizable(false); setBorderWidth(BORDER_AROUND); } public static void main(String[] args) { Gtk.init(args); new GHSeparator(); Gtk.main(); } } ``` 在我们的代码示例中,我们描述了两个化学元素,它们由水平分隔符分隔。 ```java zinc.setLineWrap(true); ``` 该行换行。 对于较长的文本,这是必需的。 ```java zinc.setAlignment(X_ALIGN, Y_ALIGN); ``` 此代码行使文本左对齐。 ```java HSeparator hsep = new HSeparator(); vbox.packStart(hsep); ``` `HSeparator`小部件已创建并放置在两个标签小部件之间。 ![HSe](https://img.kancloud.cn/41/e0/41e031a685d33cec3e4cd294bcf463f4_446x242.jpg) 图:`HSeparator` ## `CheckButton` `CheckButton`是具有两种状态的窗口小部件:打开和关闭。 接通状态通过复选标记显示。 它用来表示一些布尔属性。 `checkbutton.java` ```java package com.zetcode; import org.gnome.gdk.Event; import org.gnome.gtk.CheckButton; import org.gnome.gtk.Fixed; import org.gnome.gtk.Gtk; import org.gnome.gtk.ToggleButton; import org.gnome.gtk.Widget; import org.gnome.gtk.Window; import org.gnome.gtk.WindowPosition; /** * ZetCode Java Gnome tutorial * * This program uses a CheckButton to * toggle the visibility of a window title. * * @author jan bodnar * website zetcode.com * last modified March 2009 */ public class GCheckButton extends Window implements ToggleButton.Toggled { CheckButton check; Window window; private String title = "Check Button"; public GCheckButton() { setTitle(title); initUI(); connect(new Window.DeleteEvent() { public boolean onDeleteEvent(Widget source, Event event) { Gtk.mainQuit(); return false; } }); setSizeRequest(250, 200); showAll(); } public void initUI() { setBorderWidth(10); Fixed fixed = new Fixed(); check = new CheckButton("Show title"); check.setActive(true); check.connect(this); check.setCanFocus(false); fixed.put(check, 50, 50); add(fixed); setPosition(WindowPosition.CENTER); } public void onToggled(ToggleButton toggleButton) { if (check.getActive()) { setTitle(title); } else { setTitle(""); } } public static void main(String[] args) { Gtk.init(args); new GCheckButton(); Gtk.main(); } } ``` 根据`CheckButton`的状态,我们将在窗口的标题栏中显示标题。 ```java check = new CheckButton("Show title"); ``` `CheckButton`小部件已创建。 ```java check.setActive(true); ``` 默认情况下标题是可见的,因此我们默认情况下选中复选按钮。 ```java if (check.getActive()) { setTitle(title); } else { setTitle(""); } ``` 根据`CheckButton`的状态,我们显示或隐藏窗口的标题。 ![CheckButton](https://img.kancloud.cn/6c/8a/6c8a437a174766a7738eb13519bbc318_256x225.jpg) 图:`CheckButton` ## `TextComboBox` `TextComboBox`是一个小部件,允许用户从文本选项列表中进行选择。 `textcombobox.java` ```java package com.zetcode; import org.gnome.gdk.Event; import org.gnome.gtk.ComboBox; import org.gnome.gtk.Fixed; import org.gnome.gtk.Gtk; import org.gnome.gtk.Label; import org.gnome.gtk.TextComboBox; import org.gnome.gtk.Widget; import org.gnome.gtk.Window; import org.gnome.gtk.WindowPosition; /** * ZetCode Java Gnome tutorial * * This program shows how to use * a TextComboBox. * * @author jan bodnar * website zetcode.com * last modified March 2009 */ public class GTextComboBox extends Window implements ComboBox.Changed { TextComboBox cb; Label label; public GTextComboBox() { setTitle("TextComboBox"); initUI(); setSizeRequest(250, 200); setPosition(WindowPosition.CENTER); showAll(); } public void initUI() { connect(new Window.DeleteEvent() { public boolean onDeleteEvent(Widget source, Event event) { Gtk.mainQuit(); return false; } }); Fixed fixed = new Fixed(); label = new Label(""); fixed.put(label, 55, 130); cb = new TextComboBox(); cb.appendText("Ubuntu"); cb.appendText("Mandriva"); cb.appendText("Fedora"); cb.appendText("Mint"); cb.appendText("Debian"); cb.appendText("Gentoo"); cb.connect(this); fixed.put(cb, 50, 50); add(fixed); } public void onChanged(ComboBox comboBox) { String text = cb.getActiveText(); label.setLabel(text); } public static void main(String[] args) { Gtk.init(args); new GTextComboBox(); Gtk.main(); } } ``` 该示例显示了一个文本组合框和一个标签。 文本组合框具有六个选项的列表。 这些是 Linux Distros 的名称。 标签窗口小部件显示了从文本组合框中选择的选项。 ```java cb = new TextComboBox(); ``` `TextComboBox`小部件已创建。 ```java cb.appendText("Ubuntu"); ``` 调用`appendText()`方法来填充文本组合框。 ```java public void onChanged(ComboBox comboBox) { String text = cb.getActiveText(); label.setLabel(text); } ``` 当我们从文本组合框中选择一个选项时,将调用`onChanged()`方法。 我们获取选定的文本并将其设置为标签小部件。 ![TextComboBox](https://img.kancloud.cn/66/27/6627ddd44ba904fe5e482da2951f4a90_256x225.jpg) 图:`TextComboBox` ## `Image` 下一个示例介绍`Image`小部件。 此小部件显示图片。 `image.java` ```java package com.zetcode; import org.gnome.gdk.Event; import org.gnome.gtk.Gtk; import org.gnome.gtk.Image; import org.gnome.gtk.Widget; import org.gnome.gtk.Window; import org.gnome.gtk.WindowPosition; /** * ZetCode Java Gnome tutorial * * This program shows an image of a castle * in the window. * * @author jan bodnar * website zetcode.com * last modified March 2009 */ public class GImage extends Window { public GImage() { setTitle("Red Rock"); initUI(); setPosition(WindowPosition.CENTER); showAll(); } public void initUI() { connect(new Window.DeleteEvent() { public boolean onDeleteEvent(Widget source, Event event) { Gtk.mainQuit(); return false; } }); Image image = new Image("redrock.png"); int width = image.getRequisition().getWidth(); int height = image.getRequisition().getHeight(); setSizeRequest(width, height); add(image); setBorderWidth(2); } public static void main(String[] args) { Gtk.init(args); new GImage(); Gtk.main(); } } ``` 我们在窗口中显示红色岩石城堡。 ```java Image image = new Image("redrock.png"); ``` 我们创建`Image`小部件的实例。 请注意,我们不会捕获任何异常。 图像小部件已经可以处理它们。 如果“图像”小部件找不到`redrock.png`图像,则默认情况下将显示丢失的图像。 ```java Image image = new Image(castle); Add(image); ``` `Image`小部件已创建并添加到窗口。 ![Image](https://img.kancloud.cn/64/cf/64cf3e3f155414459928215182b82f10_456x278.jpg) 图:图像 在本章中,我们展示了 Java Gnome 编程库的第一组基本小部件。