使用NetBeans IDE 5.5创建向导控制台

来源:互联网 发布:集成吊顶配件算法 编辑:程序博客网 时间:2024/05/12 17:17

本教程将向您展示如何使用NetBeans IDE 5.5 GUI Builder创建一个向导式控制台。在本教程中,我们将创建一个示例任务调度向导。阅读完本文之后,您应该能够很容易地建立简单或复杂的向导式UI组件。

需要时间:2030分钟

先决条件

l      用户应了解基本的Java编程语言。

l      用户应能熟练使用NetBeans IDE

l      用户应已经阅读过GUI Building in NetBeans IDE 5.5教程。

教程中需要使用的软件

在开始之前,您需要在计算机上安装下列软件:

l      NetBeans IDE 5.5 (下载)

l      Java Standard Development Kit (JDKTM) 1.4.2 (下载) or 5.0 (下载) 版本

l      Java Standard Development Kit (JDKTM) 1.4.2下载)或者5.0版本(下载)

教程练习

l      练习1:创建一个项目

l      练习2:建立前端

l      练习3:添加功能

l      练习4:运行程序

练习1:创建一个项目

首先我们要创建一个新项目,将它命名为SchedulerWizard

1.       选择File > New Project,也可以单击IDE 工具栏中的New Project图标。

2.       Categories窗格中选择General节点。在 Projects 窗格中选择 Java Application,单击Next

3.       Project Name 字段输入 SchedulerWizard指定一个路径(例如,主页目录)作为项目路径;

4.       确认 Main Project 复选框被选中,取消选中 Create Main Class,如果它被选中的话。

5.       单击 Finish

练习2:构建向导前端

在这一步骤中我们将创建向导前端。我们将创建 JDialog并将所有必要的 GUI 组件添加到该对话框中。

创建基本对话框

1.       Project 窗口中,右键单击SchedulerWizard节点,选择 New > JDialog Form。或者选择SchedulerWizard节点,然后选择Menu File>New File(Ctrl+N)。之后将会生成 New File 对话框。在 categories 列表中选择Java GUI Forms,并在 File Types 列表中选择JDialog Form。单击Next

2.       在设置文件名和位置步骤中,在Class Name字段中建入SchedulerWizardDialog

3.       Package 字段中建入 my.forms

4.       单击Finish

(顺便说一句,您看到的仅仅是一个向导式组件的工作示例。)

IDESchedulerWizardDialog.java应用程序中创建了SchedulerWizardDialog SchedulerWizardDialog类,并在GUI Builder调用了SchedulerWizardDialog form。请注意my.forms包已经替代了默认的包。

添加GUI组件:建立向导基础

现在我们要将JDialog对话框放入main JPanel(其他JPanel位于其中),同时还要放入一个 JSeparator,以及三个JButton,分别代表BackNext/FinishCancel操作。对话框如下图所示:

注意:本教程假设您知道如何使用 NetBeans GUI 放置组件,有关更多信息,请参考GUI Building in NetBeans IDE 5.5。在本例中需要提醒的一点是,JSeparator和三个JButtons 控件要放置在JPanel下方,而不是放在JPanel内部。如果您看不见它,请选择Windows>Palette打开 Palette。您可以使用 PaletteUI组件拖出或放回设计区域。

1.         jPanel1重命名为 mainPaneljButton1重命名为 backButton并在文本中填入Back,将 jButton2 重命名为 nextButton 并在文本中填入NextjButton3 重命名为 cancelButton并在文本中填入Cancel

2.       确认您已同时选中这三个按钮,右键单击选择Same Size > Same Width,使得所有按钮大小一致。

3.       Properties 窗口中禁用backButton并取消勾选 enabled 属性。如果找不到 Properties 窗口,请选择Windows > Properties

添加GUI组件:建立向导屏幕图像

现在可以将屏幕图像添加到向导控制台。本教程将呈现给用户三组屏幕图像:

l      第一组屏幕图像显示各种options

l       "detailed" 屏幕图像,它依赖于第一个屏幕图像中所做的选择;

l      "summary" 屏幕图像

每个屏幕图像都使用一个JPanel显示。

如果找不到Inspector 窗口,请选择Windows > Inspector 打开它。Inspector 窗口在当前开放表单内以树型分级的方式显示了所有组件,其中包括可视化组件和容器,例如按钮、标签、菜单、和窗格,还有非可视化组件,例如计时器和源代码。

我们需要将主面板的布局设置成卡片式布局。在Inspector窗口,右键单击mainPanel JPanel,并选择 Set Layout > CardLayout。(为了避免意外关闭等情况导致程序丢失,请注意随时保存程序。)

现在我们需要在主面板中添加各种JPanel。在本教程中,我们想为用户呈现一个option/welcome 屏幕图像,为要安排的任务提供名称,并指定任务应该每天运行一次还是每周运行一次,然后展示出一个每天运行屏幕图像或者每周运行屏幕图像,最终显示summary 屏幕图像,因此我们需要在mainPanel中添加四个panel 组件。

1.       Inspector窗口中右键单击mainPanel,选择 Add from Palette > Swing Containers > Panel

2.       重复第一步,在mainPanel中另外添加三个panel

3.       jPanel1 重命名为optionsPaneljPanel2 dailyPaneljPanel3weeklyPaneljPanel4summaryPanel

4.       Inspector 窗口中选择optionsPanel,在Properties窗口中选择 Layout,选择Card Name并将名称指定为1

5.       Inspector 窗口中选择 dailyPanel Properties 窗口中选择 Layout ,选择Card Name并将名称指定为2_1

6.       Inspector 窗口中选择 weeklyPanel Properties窗口中选择 Layout ,选择Card Name并将名称指定为2_2

7.       Inspector 窗口中选择summaryPanelProperties窗口中选择 Layout,选择Card Name并将名称指定为3

这种命名规则使我们能够确定动态显示的屏幕图像。

设计Welcome 屏幕图像

这是第一个屏幕图像,它将提供给用户一组选项。

1.       Inspector窗口中,双击optionsPanel 开启 UI 设计器中的 optionsPanel

2.       添加两个 JLabel一个JTextField两个 JRadioButton以及一个 ButtonGroup将这些 JRadioButton控件在JPanel中组合一起。

3.       JTextField 重命名为 tfTask

4.       将第一个 label text文本更改为Type the name for this task

5.       将第二个 label text 文本更改为Perform this task

6.       分别将两个单选按钮重命名为rbDailyrbWeekly,文本分别设为 Daily Weekly

7.        同时选择两个单选按钮(或分开选择),在Properties 窗口修改buttonGroup属性为 buttonGroup1(这应该是唯一显示的按钮组属性)。

8.       选择 rbDaily单选按钮,在 Properties 窗口勾选selected复选框。

welcome 屏幕图像显示如下:

设计每日任务屏幕图像

如果用户在welcome 屏幕图像选择了Daily 单选按钮,这将是展示给用户的第二个屏幕图像。

1.       Inspector 窗口中双击 dailyPanel打开UI 设计器。

2.       放置各种UI组件,让它看上去像一个每日任务屏幕图像。因为本教程并不依赖于放置在这个屏幕图像中的组件,所以您可以根据自己的选择添加/放置组件。

3.       下面是一个示例模型:

设计每周任务屏幕图像

如果用户在 welcome 屏幕图像选择了 Weekly 单选按钮,这将是展示给用户的第二个屏幕图像。

1.       Inspector 窗口双击 weeklyPanel 打开UI 设计器。

4.       放置各种UI组件,让它看上去像一个每周任务屏幕图像。因为本教程并不依赖于放置在这个屏幕图像中的组件,所以您可以根据自己的选择添加/放置组件。

下面是一个示例模型:

设计Summary 屏幕图像

这个屏幕图像将用户的选择汇总。我们在此只显示了任务名称和种类,而实际的向导控制台将会显示所有被选选项的完整信息。

1.       Inspector 窗口中双击 summaryPanel,打开UI 设计器。

2.       在窗格上放置一个 JTextArea

3.       jTextArea1重命名为taSummary

4.       Inspector 窗口选择 taSummary,然后在 Properties 窗口单击省略号 (...)按钮设置背景属性,从对话框顶端的Select Mode下拉菜单中选择 Form Connection。之后在 User Code字段输入 getBackground(),单击OK。这使运行时文本框和父组件的背景颜色保持一致。

5.       Inspector 窗口中选择taSummary,在 Properties 窗口中勾选 lineWrap wrapStyleWork复选框。

6.       下面是示例图形:

练习3:添加功能

在本练习中,我们将要为 backnext cancel 按钮添加功能。使用一个基于简单状态的功能,我们可以决定要显示的屏幕图像以及要启用/禁用的按钮。

添加事件处理器

Inspector 窗口中,双击 backButton这可以添加事件处理器并启用Source 视图模式。使用 Source Editor 顶端的 Design 按钮可以切换到Design视图,并为 nextButton cancelButton 生成事件处理器。我们还需要为optionsPanel 中的 rbDaily rbWeekly 单选按钮生成事件处理器。下列代码将在Source视图模式自动生成和显示:

private void nextButtonActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
}
private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
}
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
}
private void rbDailyActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
}
private void rbWeeklyActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
}

Cancel 按钮功能

在本教程中我们只是想关闭对话框。而实际示例会询问用户是真正要取消和/或终止所有后台工作线程。在cancelButton的事件处理器中,编写下列代码:

private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {
    dispose();
}

Next 按钮功能

next按钮事件中,我们想知道当前屏幕图像的下一个被显示屏幕图像。 如果这已经是第一个屏幕图像, back按钮将不可用(默认设置);如果是第二个屏幕图像,它应该可用。如果这是最后一个屏幕图像,那么 next 屏幕图像按钮的文本应该显示为 Finish。实际上有很多编码方法都可以达到这个要求。我们使用card name确定下一个显示的屏幕图像。

我们需要添加一个实例变量来控制当前可见的card 编号。将这个变量命名为 currentDisplayNum可用数字有123

我们还需要添加另一个实例变量控制“details”(第二组)屏幕图像,将这个变量命名为 currentDetailNum。它将按照用户在welcome 屏幕图像所做的选择而改变。

public class SchedulerWizardDialog extends javax.swing.JDialog {
  private int currentDisplayNum = 1;
  private int currentDetailNum = 1;

将下列代码输入Next 按钮的事件处理方法中。

private void nextButtonActionPerformed(java.awt.event.ActionEvent evt) {
    //determine next card to display
    CardLayout cl = (CardLayout)(mainPanel.getLayout());
    String card = String.valueOf(currentDisplayNum+1);
    if(currentDisplayNum == 1) {
       //need to show second screen
       card = card + "_" +String.valueOf(currentDetailNum);
       //enable back button
       backButton.setEnabled(true);
    }else if(currentDisplayNum == 2) {
       //need to show last screen - update summary
       updateSummary();
       nextButton.setText("Finish");
    }else if(currentDisplayNum == 3) {
       //time to finish the task - perform actual scheduling logic
 
       //dispose
       dispose();
    }
    //show card
    cl.show(mainPanel, card);
    //update display number
    currentDisplayNum++;
}

Back 按钮功能

我们根据Next按钮的逆向逻辑确定要显示的屏幕图像。下面是Back 按钮事件处理方法的代码。

private void backButtonActionPerformed(java.awt.event.ActionEvent
evt) {
    //determine previous card to display
    CardLayout cl = (CardLayout)(mainPanel.getLayout());
    String card = String.valueOf(currentDisplayNum-1);
    if(currentDisplayNum == 3) {
        //need to show second screen
        card = card + "_" +String.valueOf(currentDetailNum);
        //change next button text
        nextButton.setText("Next");
    }else if(currentDisplayNum == 2) {
        //need to show first screen - disable back button
        backButton.setEnabled(false);
    }else if(currentDisplayNum == 1) {
        //we are on first screen, nothing to do
    }
    //show card
    cl.show(mainPanel, card);
    //update display number for non-1 numbers
    currentDisplayNum = currentDisplayNum > 1?(--currentDisplayNum):1;
}

Daily/Weekly 单选按钮功能

在这些单选按钮的事件处理器中,我们想让 currentDetailNum 的值做相应更新。Daily 单选按钮使用1(默认), Weekly 单选按钮使用2。这种形式还可用于增加可供用户选择的选项。下面是事件处理代码。它们非常简单。

private void rbDailyActionPerformed(java.awt.event.ActionEvent evt) {
    currentDetailNum = 1;
}
private void rbWeeklyActionPerformed(java.awt.event.ActionEvent evt) {
    currentDetailNum = 2;
}

Summary 屏幕图像功能

next按钮功能中,我们调用了一个updateSummary 方法。这个方法用来显示 summaryPanel控件中文本内容的汇总信息。下面的示例代码显示它们是如何实现的。

private void updateSummary() {
    taSummary.setText("You are about to create task with name" + tfTask.getText());
}

当然,在实际的应用程序中,您可能还想从用户所选择的各种选项中生成一份详细的汇总信息。

Main方法

NetBeans IDE已经为您写好了默认的main方法代码,用来在 JFrame中显示 SchedulerWizardDialog它应该和下面的代码一致:

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
             new SchedulerWizardDialog(new javax.swing.JFrame(), true).setVisible(true);
        }
    });
}

我们已经提供了所有必要的功能,现在就可以马上构建并运行这个程序了。看到我们使用如此简单的程序实现了这些功能时,您会感到自豪。

练习4:运行程序

在本练习中将构建并运行我们的程序,同时检查输出

1.       构建主项目 (F11)

2.       运行主项目 (F6)

程序运行之后显示如下:

单击 next 将会进入下面的屏幕图像:

如果选择了 Weekly,将会显示下面的屏幕图像:

summary 屏幕图像如下:

单击 Finish 终止这个程序。(我们没有编写任何调用 System.exit(0) 的代码,因此程序不会自动终止。选择Build > Stop Build/Run可以终止这个程序)

接下来:

本教程仅仅介绍了如何使用NetBeans创建向导式GUI组件的一些基本概念。完整的向导可以提供更详细的用户经验,但是本质与此教程一致。

相关主题

想了解更多信息请查看下列链接:

l      Java GUIs and Project Matisse Learning Trail ,包含了使用NetBeans GUI BuilderProject Matisse建立java 图形化用户接口(GUI)的相关文章、指南和教程。

l      GUI Building Tutorial ,详细的NetBeans GUI Builder教程

l      Matisse GUI Builder FAQ ,关于使用NetBeans GUI Builder的技巧和方法的汇总

 

 本文国际来源:

http://www.netbeans.org/kb/55/wizard-tutorial-uzi.html




原创粉丝点击