本教程将展示如何创建一个 Java 的桌面应用程序,用来访问以及更新数据库。本教程利用 NetBeans IDE 6.0 支持的以下技术:
我们将建立一个数据库 CRUD (增、删、改、查)的应用程序,使用一个自定义的控件用来形象化数据(汽车设计预览)。
本教程大多基于开发过程中的截图。用户界面中的一些部分在演示程序制作中可能有改变,所以您可能会注意到教程与演示程序中的一些不同。您可以现在浏览演示程序(预计约9分钟) 或者 下载演示程序( zip 格式).
预计持续时间:30 分钟
学习这个教程,你需要在你的计算机上安装以下软件:
在 IDE 中开始创建一个 CRUD(增、删、改、查) 桌面应用程序之前, 您应该已经把您的 IDE 链接上应用程序使用的数据库了。 完成这项链接高级设置可以允许您使用 IDE 的高级特性, 帮助您自动的把数据库与您的应用程序绑定起来。
在本教程中,我们提供了使用 Java DB 数据库的教程, 因为在 IDE 中提供了很方便的界面来启动以及停止 Java DB 数据库。 不过,如果不麻烦的话,您也可以选择其他的数据库。
首先检查您是否在 IDE 中注册了Java DB。 一般来说,Java DB 是自动在 IDE 中注册的, 比如说当您在 IDE 中注册了 Sun Java System Application Server 或者您在 JDK 6 上运行程序的时候。
确定 Java DB 已经在 IDE 中注册:
如果“设置”菜单是唯一一个没有标记不可用的, 您需要在 IDE 中手动启动 Java DB 的注册。
在 IDE 中手动注册 Java DB:
一旦 Java DB 在 IDE 中注册成功,您可以很简单的启动或者停止数据库服务器, 当然,创建一个新的数据库也是如此简单。
启动数据库服务器:
如果您还没有在“设置”中为数据库设置数据库文件存储位置, “设置数据库位置”的对话框将会出现,为数据库文件输入一个存储的位置, 当然,您也可以根据您的需要新建一个文件夹。
一旦服务器启动,Java DB 数据库进程的标签会显示在“输出”窗口, 显示如下的一段消息:
Apache Derby Network Server - 10.2.2.0 - (485682) started and ready to accept connections on port 1527 at 2007-09-05 10:26:25.424 GMT
创建数据库:
到此,我们成功的启动了数据库服务器并且创建了一个数据库。 但是在 IDE 中开始工作前,我们仍然需要连接这个新的数据库。 链接 car_database 数据库:
链接节点的图标现在应该完全变成了 (),表示链接成功。
粘贴的这些内容是 SQL 的描述语句,他将汽车的一些数据植入到数据库中。
Java 桌面应用程序模板提供了许多基本的可视化应用模块,包括菜单以及按钮。
在与数据库建立连接后,数据表应该显示为 CAR , 其包含的列应包括 10 列 CAR 数据库的内容的名称。 现在,我们的应用程序中只用其中的5列。
向导其后会生成基本的用户界面,包含一个表格以及一个数据库连接。 在 IDE 生成项目以及代码的过程可能会耗费几秒钟或更长一些的时间。
这个时候,您就有了一个最基本的用户图形界面( GUI )应用程序, 有如下功能:
按照以下步骤查看已经在应用程序中建立好的一些特性:
稍等片刻,应用程序启动,出现一个叫做“ Database Application Example ”的窗口。 这个窗口包含一个表格以及一些控件,您可以通过这些控件来编辑 CAR 数据库。
这时,这个值在表格中显示被更改了。(不过,当您单击保存之后这个值才会写入数据库中。)
同样,您可以用这种方法更新表格中其他的值。
Database Application Example 窗口将会按照以您关闭应用程序时候所改变的窗体位置以及大小打开。
主表(一个 JTable 控件)和数据库之间的连接被如下 IDE 生成的一个组合机制所解决:
使用 Inspector 窗口和属性表,您可以按照如下步骤看到 JTable 如何绑定数据:
除了属性表中的 Binding 种类外,您还可以使用上下文菜单中的 Bind 菜单。
针对一些我们起初排除的属性,我们现在向表单添加控件。替代使用表格, 我们将添加 Jslider 组件(用于 tire size 和 modernness ) 和 JCheckbox 组件(用于 sun roof 和 spoiler )来实现操作的相应功能。.
根据以下步骤添加额外的控件:
提示: 如果你将控件放置在了您不想要的位置上,因此造成了一些布局上不期望的改变。 您可以使用“撤销”命令撤销这些修改。选择 Edit > Undo 或者按 Ctrl-Z。
窗体应该如如下截图一样。"
我们现在将使用 beans 绑定技术特性,将表格单元中显示的值和我们已经添加的控件的状态绑定。 这将使您可以通过滚动条和复选框改变表格单元中的值。
将滚动条绑定至相对应的表元素:
将复选框绑定至相对应的表元素:
您现在可以使用滚动条以及复选框改变数据库的输入项了。
验证滚动条和复选框是否工作:
运行中的应用程序应看起来与下面显示的截图相似。"
数据库中的值应该被更改为您所更改的值。
为了更加图形化的演示 Beans 绑定技术的运行让我们添加一个自定义控件, 画出选择出的车的预览图。我们将绑定此控件的属性以及所对应的表格元素。 然后当您再次运行程序,车辆预览将按照您选择的行以及各个字段的值的变化而改变。
令 CarPreview 控件可在 CarsApp 项目中可被应用:
项目在 IDE 中被打开。
编译此项目中的文件,这样您可以将 CarPreview 类作为一个 bean 来使用, 可以将其直接拖拽到窗体中。
这个组件被写为一个 JavaBeans 组件,这样您可以将其添加到 Palette 中,这样您可以很方便的将 这个组件添加到多个应用程序中。但是现在我们将简单的将此组件直接从“项目”窗口拖动到您的程序中。
将 CarPreview 控件添加到应用程序:
在运行中的应用程序中,您可以看到 CarPreview 控件根据您选择的表格中不同的行, 改变表格中的值,移动滚动条以及选择和取消选择复选框而改变。
下图为应用程序的最终运行结果。
本教程为在IDE 中使用 Swing 应用程序框架以及 Beans 绑定技术提供了初步教程。
了解更多关于 GUI 应用程序的设计,参阅 Designing a Swing GUI.
了解更多关于在 IDE 中使用 Beans 绑定技术, 参阅 Binding Beans and Data in a Desktop Application.
附:
car.sql
create table "CAR" ( "MAKE" VARCHAR(50) not null primary key, "MODEL" VARCHAR(50), "PRICE" INTEGER, "BODY_STYLE" VARCHAR(30), "COLOR" VARCHAR(20), "SUN_ROOF" INTEGER default 0, "SPOILER" INTEGER default 0, "TIRE_SIZE" INTEGER, "TIRE_TYPE" INTEGER, "MODERNNESS" INTEGER ); insert into car values ('Acura', 'NSX', 47075, 'coupe', 'yellow', 1, 1, 18, 1, 38); insert into car values ('Audi', 'A8', 63890, 'sedan', 'black', 1, 0, 24, 0, 88); insert into car values ('BMW', 'M-Series', 108900, 'coupe', 'red', 1, 0, 50, 0, 44); insert into car values ('Buick', 'Lucerne', 31599, 'sedan', 'black', 1, 0, 26, 2, 65); insert into car values ('Cadilac', 'XLR', 62777, 'convertible', 'green', 0, 0, 14, 1, 26); insert into car values ('Chevrolet', 'Corvette', 74999, 'coupe', 'yellow', 0, 0, 53, 2, 44); insert into car values ('Chrysler', 'Sebring', 89595, 'convertible', 'silver', 1, 1, 63, 0, 49); insert into car values ('Daewoo', 'Leganza', 10590, 'sedan', 'blue', 1, 0, 47, 1, 66); insert into car values ('Dodge', 'Ram 2500', 38825, 'pickup', 'white', 0, 1, 96, 1, 82); insert into car values ('Eagle', 'Talon', 5995, 'hatchback', 'silver', 1, 1, 42, 1, 53); insert into car values ('Ford', 'F250', 47440, 'pickup', 'orange', 0, 1, 46, 1, 57); insert into car values ('Geo', 'Metro LSI', 3495, 'convertible', 'green', 0, 1, 54, 0, 74); insert into car values ('GMC', 'Yukon XL Denali', 46355, 'wagon', 'gray', 0, 1, 63, 1, 45); insert into car values ('Honda', 'Odyssey', 34895, 'coupe', 'white', 1, 1, 11, 2, 68); insert into car values ('Hummer', 'H1', 119999, 'sedan', 'red', 1, 1, 39, 0, 17); insert into car values ('Hyundai', 'Azera', 27950, 'sedan', 'silver', 1, 1, 13, 0, 18); insert into car values ('Infiniti', 'QX56', 44995, 'wagon', 'green', 0, 0, 15, 2, 75); insert into car values ('Isuzu', 'Hombre', 30545, 'wagon', 'white', 1, 0, 16, 2, 55); insert into car values ('Jaguar', 'XK', 91675, 'convertible', 'brown', 1, 1, 17, 2, 31); insert into car values ('Jeep', 'Commander', 37497, 'wagon', 'silver', 1, 1, 54, 0, 96); insert into car values ('Kia', 'Amanti', 25988, 'sedan', 'gray', 1, 1, 62, 0, 100); insert into car values ('Land Rover', 'Range Rover', 89350, 'wagon', 'black', 0, 1, 71, 0, 63); insert into car values ('Lexus', 'SC 430', 61321, 'convertible', 'yellow', 1, 1, 81, 0, 98); insert into car values ('Lincoln', 'Navigator', 42500, 'wagon', 'blue', 1, 1, 46, 0, 85); insert into car values ('Mazda', 'CX-7', 27988, 'wagon', 'brown', 1, 0, 28, 0, 40); insert into car values ('Mercedes-Benz', 'CLS Class', 86900, 'sedan', 'black', 0, 1, 99, 1, 46); insert into car values ('Mercury', 'Mariner', 30995, 'wagon', 'red', 0, 0, 59, 2, 41); insert into car values ('MINI', 'Cooper', 32930, 'convertible', 'silver', 0, 0, 78, 1, 98); insert into car values ('Mitsubishi', 'Eclipse', 31995, 'convertible', 'red', 0, 0, 83, 1, 48); insert into car values ('Nissan', 'Armada', 36777, 'wagon', 'blue', 0, 1, 11, 1, 60); insert into car values ('Oldsmobile', 'Silhouette', 17500, 'wagon', 'blue', 1, 1, 79, 1, 27); insert into car values ('Plymouth', 'Voyager', 9995, 'wagon', 'white', 1, 1, 37, 1, 13); insert into car values ('Pontiac', 'Firebird', 39999, 'hatchback', 'red', 0, 0, 13, 0, 18); insert into car values ('Porche', '911 Carrera', 399999, 'coupe', 'silver', 1, 0, 18, 2, 58); insert into car values ('Saab', '9-3', 35999, 'convertible', 'green', 1, 1, 16, 0, 13); insert into car values ('Saturn', 'Sky', 27499, 'convertible', 'silver', 1, 1, 25, 0, 86); insert into car values ('Scion', 'tC', 21530, 'sedan', 'red', 0, 0, 92, 1, 37); insert into car values ('Subaru', 'B9 Tribeca', 34999, 'wagon', 'green', 0, 1, 98, 0, 88); insert into car values ('Suzuki', 'XL-7', 25880, 'wagon', 'brown', 1, 0, 83, 1, 16); insert into car values ('Toytota', 'MR2 Spyder', 99999, 'convertible', 'silver', 0, 0, 21, 2, 99); insert into car values ('Volkswagen', 'Touareg', 51274, 'wagon', 'black', 1, 0, 91, 0, 48); insert into car values ('Volvo', 'XC90', 45845, 'wagon', 'gray', 0, 0, 31, 2, 32);