// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= 构建 GUI 应用程序简介
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 构建 GUI 应用程序简介 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 构建 GUI 应用程序简介

撰稿人：Saleem Gul 和 Tomas Pavek

本入门教程讲述如何创建简单图形用户界面以及如何添加简单后端功能。尤其介绍了如何为 Swing 窗体中的按钮和字段行为编写代码。

我们将完成 GUI 布局和设计工作并添加几个按钮和文本字段。这些文本字段用于接收用户输入和显示程序输出。这些按钮用于启动前端的内置功能。我们创建的应用程序是一个非常简单但功能完善的计算器。

有关更全面的 GUI 构建器设计功能指南（包括各种设计功能的视频演示），请参见link:quickstart-gui.html[+在 NetBeans IDE 中设计 Swing GUI+]。

*预计时间：20 分钟*



image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 6.9 及更高版本"]


*要学完本教程，您需要具备以下软件和资源。*

|===
|软件或资源 |要求的版本 

|link:http://netbeans.org/downloads/[+带有 Java SE 的 NetBeans IDE+] |版本 6.9 或更高版本 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java 开发工具包 (JDK)+] |版本 6、7 或 8 
|===


== 练习 1：创建项目

第一步是为要开发的应用程序创建 IDE 项目。我们将项目命名为  ``NumberAddition`` 。

1. 选择 ``文件``  >  ``新建项目`` 。或者，也可以单击 IDE 工具栏中的“新建项目”图标。
2. 在“类别”窗格中，选择 "Java" 节点。在“项目”窗格中，选择“Java 应用程序”。单击“下一步”。
3. 在“项目名称”字段中键入 `NumberAddition`，然后指定路径（例如，在主目录中）作为项目位置。
4. （可选）选中“使用专用文件夹存储库”复选框，并指定库文件夹的位置。有关详细信息，请参见_使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG455[+与其他用户共享库+]。
5. 如果已选中“创建主类”复选框，请取消选中该复选框。
6. 单击“完成”。


== 练习 2：构建前端

要继续构建界面，我们需要创建一个 Java 容器，以便放置所需的其他 GUI 组件。在此步骤中，我们将使用 `JFrame` 组件创建一个容器。我们将该容器放在新包中，该包将显示在“源包”节点中。


=== 创建 JFrame 容器

1. 在“项目”窗口中，右键单击  ``NumberAddition``  节点，然后选择 ``新建``  >  ``其他`` 。
2. 在“新建文件”对话框中，选择  ``Swing GUI 窗体`` 类别和  ``JFrame 窗体`` 文件类型。单击“下一步”。
3. 输入  ``NumberAdditionUI``  作为类名。
4. 在“包”中输入 `my.numberaddition`。
5. 单击“完成”。

IDE 将在 `NumberAddition` 应用程序中创建 `NumberAdditionUI` 窗体和 `NumberAdditionUI` 类，然后在 GUI 构建器中打开 `NumberAdditionUI` 窗体。`my.NumberAddition` 包将替代默认包。


=== 添加组件：生成前端

接下来，我们将通过组件面板使用 JPanel 填充应用程序前端。然后，添加三个 JLabel、三个 JTextField 和三个 JButton。如果以前没有用过 GUI 构建器，您可能会发现link:quickstart-gui.html[+在 NetBeans IDE 中设计 Swing GUI+] 教程中有关组件放置的信息非常有用。

在拖动并放置完上述组件后，JFrame 应类似于以下屏幕快照。

image::images/Figure1.png[]

如果 IDE 右上角未显示“组件面板”窗口，则选择“窗口”>“组件面板”。

1. 先从“组件面板”的“Swing 容器”类别中选择一个面板，然后将其拖放到 JFrame 上。
2. 在突出显示该 JPanel 时，转至“属性”窗口，然后单击 "Border" 旁边的省略号 (...) 按钮以选择边框样式。
3. 在 "Border" 对话框中，从列表中选择“带标题的边框”，然后在“标题”字段中键入 `Number Addition`。单击“确定”。保存更改并退出该对话框。
4. 现在，将会看到一个标题为 Number Addition 的空 JFrame，它与屏幕快照类似。按照上面的屏幕快照所示，添加三个 JLabel、三个 JTextField 和三个 JButton。


=== 重命名组件

在该步骤中，我们将重命名刚添加到 JFrame 中的这些组件的显示文本。

1. 双击 `jLabel1` 并将文本属性更改为 `First Number`。
2. 双击 `jLabel2` 并将文本更改为 `Second Number`。
3. 双击 `jLabel3` 并将文本更改为 `Result`。
4. 删除 `jTextField1` 中的样例文本。要使显示文本可编辑，可以右键单击文本字段，然后从弹出式菜单中选择“编辑文本”。可能需要将 `jTextField1` 调整为原始大小。对于 `jTextField2` 和 `jTextField3`，重复此步骤。
5. 将 `jButton1` 显示文本重命名为 `Clear`。（可以通过右键单击按钮并选择“编辑文本”来编辑按钮的文本。或者，也可以单击按钮，稍等片刻，然后再次单击按钮。）
6. 将 `jButton2` 显示文本重命名为 `Add`。
7. 将 `jButton3` 显示文本重命名为 `Exit`。

现在，完成的 GUI 应类似于以下屏幕快照：

image::images/Figure2.png[]


== 练习 3：添加功能

在本练习中，我们将为 "Add"、"Clear" 和 "Exit" 按钮添加功能。`jTextField1` 和 `jTextField2` 框用于用户输入，`jTextField3` 用于程序输出；我们要创建的应用程序是一个非常简单的计算器。我们现在就开始吧。


=== 使 "Exit" 按钮正常工作

要为这些按钮添加功能，必须为每个按钮指定事件处理程序以响应事件。在本示例中，我们需要了解何时通过鼠标单击或键盘按下了按钮。因此，我们使用 ActionListener 来响应 ActionEvent。

1. 右键单击 "Exit" 按钮。从弹出式菜单中选择“事件”>“操作”> "actionPerformed"。请注意，该菜单中还包含很多其他可响应的事件！在选择  ``actionPerformed``  事件时，IDE 自动在 "Exit" 按钮中添加 ActionListener，并生成一种处理程序方法，以处理监听程序的 actionPerformed 方法。
2. IDE 将打开源代码窗口并滚动至某一位置，在此将实现按下按钮（通过鼠标单击或键盘）时希望其执行的操作。源代码窗口应包含以下行：

[source,java]
----

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
    //TODO add your handling code here:
                }
----

[start=3]
. 现在，我们将为希望 "Exit" 按钮执行的操作添加代码。将 TODO 行替换为 `System.exit(0);`。完成的 "Exit" 按钮代码应如下所示：

[source,java]
----

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
    System.exit(0);
                } 
----


=== 使 "Clear" 按钮正常工作

1. 单击工作区域顶部的“设计”标签以返回到窗体设计区域。
2. 右键单击 "Clear" 按钮 (`jButton1`)。从弹出式菜单中选择“事件”>“操作”> "actionPerformed"。
3. "Clear" 按钮用于删除 jTextField 中的所有文本。为此，将添加一些与以上代码类似的代码。完成的源代码应如下所示：

[source,java]
----

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
    jTextField1.setText("");
    jTextField2.setText("");
    jTextField3.setText("");
                }
----

上面的代码将所有三个 JTextField 中的文本更改为空，实际就是使用空白覆盖现有文本。


=== 使 "Add" 按钮正常工作

"Add" 按钮用于执行三个操作。

1. 它接受 `jTextField1` 和 `jTextField2` 中的用户输入，并将输入类型由字符串转换为浮点。
2. 然后，它将两个数相加。
3. 最后，将相加之和的类型转换为字符串，并将其放在 `jTextField3` 中。
我们现在就开始吧！

[start=1]
1. 单击工作区域顶部的“设计”标签以返回到窗体设计区域。
2. 右键单击 "Add" 按钮 (`jButton2`)。从弹出式菜单中选择“事件”>“操作”> "actionPerformed"。
3. 我们将添加一些代码以使 "Add" 按钮正常工作。完成的源代码应如下所示：

[source,java]
----

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
    // First we define float variables.
    float num1, num2, result;
    // We have to parse the text to a type float.
    num1 = Float.parseFloat(jTextField1.getText());
    num2 = Float.parseFloat(jTextField2.getText());
   // Now we can perform the addition.
    result = num1+num2;
    // We will now pass the value of result to jTextField3.
    // At the same time, we are going to
    // change the value of result from a float to a string.
    jTextField3.setText(String.valueOf(result));
                    }
----

程序已创建完毕，我们现在可以构建并运行该程序以查看其运行情况。


== 练习 4：运行程序

*在 IDE 中运行程序：*

1. 选择“运行”>“运行主项目”（或按 F6 键）。

*注：*如果显示的窗口通知您项目 NumberAddition 没有设置主类，则应在同一窗口中选择  ``my.NumberAddition.NumberAdditionUI``  作为主类，然后单击“确定”按钮。

*在 IDE 外部运行程序：*

1. 选择“运行”>“清理并构建主项目”（Shift-F11 组合键）以构建应用程序 JAR 文件。
2. 通过使用系统的文件资源管理器或文件管理器，导航至 `NumberAddition/dist` 目录。

*注：* ``NumberAddition``  项目目录的位置取决于在<<Exercise_1,练习 1：创建项目>>部分中的第 3 步创建项目时指定的路径。


[start=3]
. 双击 `NumberAddition.jar` 文件。

几秒钟后，将会启动应用程序。

*注：*如果在双击 JAR 文件时没有启动应用程序，请参见link:../../articles/javase-deploy.html#troubleshooting[+本文+]以了解在操作系统中设置 JAR 文件关联的相关信息。

也可以通过命令行启动应用程序。

*通过命令行启动应用程序：*

1. 在系统上，打开命令提示符或终端窗口。
2. 在命令提示符中，转至 `NumberAddition/dist` 目录。
3. 在命令行中，键入以下语句：

[source,java]
----

java -jar  NumberAddition.jar
----

*注：*请确保  ``my.NumberAddition.NumberAdditionUI``  设置为主类，然后再运行应用程序。检查方式如下：在“项目”窗格中右键单击 NumberAddition 项目节点，在弹出菜单中选择“属性”，然后在“项目属性”对话框中选择“运行”类别。“主类”字段将显示  ``my.numberaddition.NumberAdditionUI`` 。


== 事件处理的工作方式

本教程已介绍了如何响应简单的按钮事件。还可以让应用程序响应很多其他事件。IDE 可以帮助您查找 GUI 组件可处理的可用事件列表：

1. 返回至编辑器中的 `NumberAdditionUI.java` 文件。单击“设计”标签以在 GUI 构建器中查看 GUI 布局。
2. 右键单击任何 GUI 组件，然后从弹出式菜单中选择“事件”。目前，仅浏览菜单以查看其中的内容，而无需选择任何内容。
3. 或者，也可以从“窗口”菜单中选择“属性”。在“属性”窗口中，单击“事件”标签。在“事件”标签中，可以查看和编辑与当前活动 GUI 组件关联的事件处理程序。
4. 可以让应用程序响应按键、鼠标单击、双击和三击、鼠标移动、窗口大小以及焦点变化。可以从“事件”菜单中为所有这些内容生成事件处理程序。最常用的事件是 Action 事件。（要了解link:http://java.sun.com/docs/books/tutorial/uiswing/events/generalrules.html#twokinds[+事件处理的最佳做法+]，请参见 Sun 的 link:http://java.sun.com/docs/books/tutorial/uiswing/events/index.html[+Java 事件教程+]。）

事件处理是如何工作的呢？每次从“事件”菜单中选择事件时，IDE 都会自动创建一个所谓的事件监听程序，并将其与组件关联。请完成以下步骤以查看事件处理的工作方式。

1. 返回至编辑器中的 `NumberAdditionUI.java` 文件。单击“源”标签以查看 GUI 源代码。
2. 向下滚动并注意刚实现的方法 `jButton1ActionPerformed()`、`jButton2ActionPerformed()` 和 `jButton3ActionPerformed()`。这些方法称为事件处理程序。
3. 现在，滚动至名为 `initComponents()` 的方法。如果未看到该方法，请查找显示 `Generated Code` 的行；单击该行旁边的 + 号以展开折叠的 `initComponents()` 方法。
4. 首先，请注意 `initComponents()` 方法周围的蓝色块。此代码是由 IDE 自动生成的，无法对其进行编辑。
5. 现在，浏览 `initComponents()` 方法。此外，该方法还包含用于初始化 GUI 组件并将其放置在窗体上的代码。在“设计”视图中放置和编辑组件时，将会自动生成和更新该代码。
6. 在 `initComponents()` 中，向下滚动至显示以下内容的位置：

[source,java]
----

jButton3.setText("Exit");
jButton3.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
           jButton3ActionPerformed(evt);
    }
            });
----

这是在 GUI 组件中添加事件监听程序对象的位置；在本示例中，将在 `jButton3` 中注册 ActionListener。ActionListener 接口具有一个 actionPerformed 方法，该方法采用 ActionEvent 对象（只需调用 `jButton3ActionPerformed` 事件处理程序即可实现）作为其参数。现在，该按钮将监听 action 事件。每次按下该按钮时，都会生成 ActionEvent 并将其传递给监听程序的 actionPerformed 方法，而该方法又会执行在该事件的事件处理程序中提供的代码。

一般来说，要能够进行响应，每个交互式 GUI 组件需要在事件监听程序中进行注册，并且需要实现事件处理程序。正如您所看到的一样，NetBeans IDE 可处理关联事件监听程序的工作，因此，您可以集中精力实现应由事件触发的实际业务逻辑。

link:/about/contact_form.html?to=3&subject=Feedback:%20Introduction%20to%20GUI%20Building[+发送有关此教程的反馈意见+]



== 另请参见

* _使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG920[+实现 Java GUI+]
* link:quickstart-gui.html[+在 NetBeans IDE 中设计 Swing GUI+]
* link:gui-image-display.html[+在 GUI 应用程序中处理图像+]
* link:hibernate-java-se.html[+在 Java Swing 应用程序中使用 Hibernate+]
* link:../../trails/matisse.html[+Java GUI 应用程序学习资源+]
* link:../../trails/java-se.html[+常规 Java 开发学习资源+]
* link:http://wiki.netbeans.org/wiki/view/NetBeansUserFAQ#section-NetBeansUserFAQ-GUIEditorMatisse[+GUI 构建器 - 常见问题解答+]
* link:http://download.oracle.com/javase/tutorial/index.html[+Java(tm) 教程+]中的link:http://download.oracle.com/javase/tutorial/uiswing/events/index.html[+课程：编写事件监听程序+]。
