# JRuby Swing 简介

> 原文： [http://zetcode.com/gui/jrubyswing/introduction/](http://zetcode.com/gui/jrubyswing/introduction/)

在 JRuby Swing 教程的这一部分中，我们将介绍 Swing 工具包并使用 JRuby 编程语言创建第一个程序。

本教程的目的是让您开始使用 JRuby 语言的 Swing 工具包。 可以在此处下载本教程中使用的图像。 我使用了 Gnome 项目的 Tango 图标包中的一些图标。

## 关于

Swing 库是 Java 编程语言的官方 Java GUI 工具箱。 它用于使用 Java 创建图形用户界面。 Swing 是一个高级 GUI 工具箱。 它具有丰富的组件集。 从基本的按钮，标签，滚动条到高级的组件（例如树和表格）。 Swing 本身是用 Java 编写的。 Swing 也可用于其他语言。 例如，JRuby，Jython，Groovy 或 Scala。

JRuby 是 Ruby 编程语言的 Java 实现。 JRuby 可以导入任何 Java 类。

执行本教程中的示例有两种基本方法。 一种方法是安装 Ruby NetBeans 插件。 它还包含 JRuby。 创建新的 Ruby 项目时，请确保选择 JRuby 平台。

另一种方法是从 [jruby.org](http://jruby.org) 网站下载发行版。

```rb
$ tar -xzvf jruby-bin-1.5.6.tar.gz
$ mv jruby-1.5.6/ ~/bin

```

安装 JRuby 非常容易。 我们提取压缩档案的内容，然后将目录移动到选定位置。 在我的系统上，我已将目录移到主目录的 bin 目录中。

```rb
$ ~/bin/jdk1.6.0_21/bin/java -jar ~/bin/jruby-1.5.6/lib/jruby.jar simple.rb

```

我们已经在选定目录中安装了 JRuby。 在`lib`子目录中，我们将找到`jruby.jar`文件，该文件用于执行 JRuby 脚本。

```rb
$ cat /usr/local/bin/jruby 
#!/bin/bash

~/bin/jdk1.6.0_21/bin/java -jar ~/bin/jruby-1.5.6/lib/jruby.jar $1

```

（可选）我们可以创建一个 bash 文件，该文件将自动启动我们的 JRuby 脚本。 然后，我们可以将`#!/usr/local/bin/jruby`路径放入脚本。

## 简单的例子

在第一个示例中，我们将在屏幕上显示一个基本窗口。

```rb
#!/usr/local/bin/jruby

# ZetCode JRuby Swing tutorial
# 
# This example shows a simple
# window in the center of the screen.
# 
# author: Jan Bodnar
# website: www.zetcode.com
# last modified: December 2010

include Java

import javax.swing.JFrame

class Example < JFrame

    def initialize
        super "Simple"

        self.initUI
    end

    def initUI

        self.setSize 300, 200
        self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
        self.setLocationRelativeTo nil
        self.setVisible true
    end
end

Example.new

```

尽管这段代码很小，但是应用窗口可以做很多事情。 可以调整大小，最大化，最小化。 随之而来的所有复杂性对应用程序员都是隐藏的。

```rb
include Java

```

我们将 Java API 包含在 JRuby 中。

```rb
import javax.swing.JFrame

```

我们导入一个`JFrame`类。 `JFrame`是带有标题栏和边框的顶层窗口。

```rb
self.initUI

```

我们将用户界面的创建委托给`initUI`方法。

```rb
self.setSize 300, 200

```

我们设置窗口的大小。

```rb
self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE

```

如果单击标题栏的关闭按钮，此方法可确保窗口终止。 默认情况下，没有任何反应。

```rb
self.setLocationRelativeTo nil

```

我们将窗口置于屏幕中央。

```rb
self.setVisible true

```

最后，窗口显示在屏幕上。

## 工具提示

工具提示是一个小的矩形窗口，它提供有关对象的简短信息。 它通常是一个 GUI 组件。 它是应用帮助系统的一部分。

```rb
#!/usr/local/bin/jruby

# ZetCode JRuby Swing tutorial
# 
# This code shows a tooltip on
# a window and a button
# 
# author: Jan Bodnar
# website: www.zetcode.com
# last modified: December 2010

include Java

import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JPanel

class Example < JFrame

    def initialize
        super "Tooltips"

        self.initUI
    end

    def initUI

        panel = JPanel.new
        self.getContentPane.add panel

        panel.setLayout nil 
        panel.setToolTipText "A Panel container"

        button = JButton.new "Button"
        button.setBounds 100, 60, 100, 30
        button.setToolTipText "A button component"

        panel.add button

        self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
        self.setSize 300, 200
        self.setLocationRelativeTo nil
        self.setVisible true
    end

end

Example.new

```

在示例中，我们为框架和按钮设置工具提示。

```rb
panel = JPanel.new
self.getContentPane.add panel

```

我们创建一个`JPanel`组件。 它是一个通用的轻量级容器。 `JFrame`有一个区域，您可以在其中放置名为内容窗格的组件。 我们将面板放入此窗格。

```rb
panel.setLayout nil 

```

默认情况下，`JPanel`具有一个`FlowLayout`管理器。 布局管理器用于将小部件放置在容器上。 如果我们调用`setLayout nil`，则可以绝对定位组件。 为此，我们使用`setBounds`方法。

```rb
panel.setToolTipText "A Panel container"

```

要启用工具提示，我们调用`setTooltipText`方法。

![Tooltip](img/43d89b3e1caa1a7e85fd0c0ba0358205.jpg)

图：工具提示

## 退出按钮

在本节的最后一个示例中，我们将创建一个退出按钮。 当我们按下此按钮时，应用终止。

```rb
#!/usr/local/bin/jruby

# ZetCode JRuby Swing tutorial
#
# This program creates a quit
# button. When we press the button,
# the application terminates. 
#
# author: Jan Bodnar
# website: www.zetcode.com
# last modified: December 2010

include Java

import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JPanel
import java.lang.System

class Example < JFrame

    def initialize
        super "Quit button"

        self.initUI
    end

    def initUI

        panel = JPanel.new
        self.getContentPane.add panel

        panel.setLayout nil

        qbutton = JButton.new "Quit"
        qbutton.setBounds 50, 60, 80, 30
        qbutton.add_action_listener do |e|
            System.exit 0
        end

        panel.add qbutton    

        self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE
        self.setSize 300, 200
        self.setLocationRelativeTo nil
        self.setVisible true
    end

end

Example.new

```

我们在窗口上放置一个`JButton`。 我们将向该按钮添加一个动作监听器。

```rb
qbutton = JButton.new "Quit"
qbutton.setBounds 50, 60, 80, 30

```

在这里，我们创建一个按钮。 我们通过调用`setBounds`方法对其进行定位。

```rb
qbutton.add_action_listener do |e|
    System.exit 0
end

```

我们向按钮添加一个动作监听器。 监听器终止应用。

![Quit button](img/42d3a3d39c91ef8b5a4eb2ff4aaaf461.jpg)

图：退出按钮

本节介绍了使用 JRuby 语言的 Swing 工具包。