javafx⽰例_JavaFX列表⽰例
javafx ⽰例
这是使⽤JavaFX构建的⽰例列表应⽤程序。 该应⽤程序是待办事项列表。 该应⽤程序具有添加,更新和删除列表中项⽬的功能。 列表数据存储在HSQLDB关系数据库中。 该应⽤程序使⽤JDBC(Java数据库连接)API访问数据库。 该应⽤程序打包为可执⾏JAR⽂件。
JavaFX 2.2,Java SE 7和HSQLDB 2.3.2⽤于构建应⽤程序。
本⽂详细介绍了构建应⽤程序。 本⽂件内容:
⽬录
1.安装HSQL数据库
关于HSQLDB
HSQL关系数据库⽤于存储待办事项数据。 在本节中–获取并安装数据库。
HSQLDB(HyperSQL数据库)是⽤Java编写SQL关系数据库软件,可在JVM中运⾏。 它是⼀个⼩型,
快速的多线程事务型数据库引擎,具有基于内存和基于磁盘的表,并⽀持嵌⼊式和服务器模式。 这包括JDBC驱动程序。
下载资料库
这样就完成了安装。 已安装的数据库包含⽤户⽂档,JDBC驱动程序,数据库可执⾏⽂件和实⽤程序。 安装⽬录具有/doc和/lib⽬录(以及其他⽬录)。
/doc⽬录包含⽤户指南。
/lib⽬录具有以下常⽤的JAR⽂件:
hsqldb.jar :它具有数据库引擎,JDBC驱动程序和GUI数据库访问⼯具。
sqltool.jar :这有⼀个SQL命令⾏数据库访问⼯具。
2.创建应⽤数据库和表javaswing和javafx
创建待办事项数据库
GUI数据库访问⼯具⽤于创建和访问数据库。 从DOS命令提⽰符运⾏以下命令:
> java -cp "X:\JCG\articles\A JavaFX List Example\hsqldb-2.3.2\hsqldb\lib\hsqldb.jar" org.hsqldb.util.DatabaseManagerSwing
注意: hsqldb.jar⽂件位于类路径中。
这将打开⼀个“ Connect GUI”对话框,如下所⽰。
在对话框中输⼊以下信息:
最近的设置:<;现在不选择任何内容。 下次连接数据库时,选择现在创建的设置。
设置名称:<;输⼊名称> todo db设置
类型:<select> HSQL数据库引擎独⽴
驱动程序:<select> hsqldb.jdbcDriver
URL:<;输⼊数据库⽂件路径> jdbc:hsqldb:file:<<⽂件路径–有关指定路径的更多详细信息,请参见下⾯的注释>>
⽤户:<;留空>
密码:<;留空>
关于URL的⽂件路径的注意事项:可以将⽂件路径指定为相对路径或绝对路径。 相对路径是相对于当前⽬录的。 例如,URL中
的jdbc:hsqldb:file:db\TODOS_DB将创建⼀个名为db的⽬录,并在其中创建TODOS_DB数据库。 带有绝对路径的⽰例
是jdbc:hsqldb:file:X:\JCG\articles\A JavaFX List Example\db\TODOS_DB 。
单击确定。
这将在指定⽬录中创建⼀个名为TODOS_DB的数据库。 这还将打开“ HSQLDatabase Manager”窗⼝。 该窗⼝具有显⽰数据库结构,SQL条⽬和结果详细信息的区域。 窗⼝如下所⽰。
2.2创建待办事项表
待办事项表具有三列:id,名称和描述。
id:这是数据库系统⽣成的唯⼀整数。 这被定义为IDENTITY列。
IDENTITY列是由数据库的序列⽣成器⾃动⽣成的INTEGER。 默认情况下,列值从1开始并递增1。当在表中进⾏插⼊时,将⾃动⽤新的序列号填充id列值。 本⽂后⾯将显⽰⽤于插⼊和检索id列值的语法(请参阅第5章“创建数据库访问代码” )。
名称:定义为VARCHAR(50),不为null。
描述:这被定义为VARCHAR(500)。
在“ HSQLDatabase Manager”窗⼝中,输⼊以下SQL脚本并执⾏它。
CREATE TABLE TODO_TABLE (
id INTEGER GENERATED BY DEFAULT AS IDENTITY,
name VARCHAR(50) NOT NULL,
description VARCHAR(500)
);
这将创建待办事项表。 可以在数据库结构区域中查看新创建的表。
注意:此步骤需要完成,然后再继续。 该应⽤程序的代码假定已创建数据库和表。
3.申请
待办事项显⽰在列表中,其中每个待办事项都是⼀个列表项。 在列表中选择待办事项时,名称和描述分别显⽰在⽂本框和⽂本区域中。 该数据可以编辑。 有⼀些按钮可以创建待办事项,删除和保存。 状态消息显⽰最近执⾏的操作。
GUI显⽰在⼀个窗⼝中。 可从todo数据库访问列表和⽂本框/区域中显⽰的数据。 该数据库在应⽤程序启动时打开,在关闭应⽤程序时关闭。
下⾯显⽰了完成的应⽤程序的GUI。
应⽤类别
该应⽤程序包含三个Java类。
Todo.java:此类表⽰待办事项。
TodoApp.java:此类是具有GUI和程序执⾏逻辑的主要应⽤程序。
TodoDataAccess.java:此类具有访问todo数据库的功能。
3.1.1 Todo.java
待办事项由Todo.java类表⽰。 待办事项具有名称和描述属性。 这还将维护⼀个唯⼀的id字段。
3.1.2 TodoDataAccess.java
此类具有访问todo数据库和数据的功能。 其功能是:
连接并关闭数据库
插⼊,更新,删除,查询和验证数据库中的数据
3.1.3 TodoApp.java
此类是主要的应⽤程序。 它具有启动应⽤程序,关闭应⽤程序,创建⽤户界⾯以及将GUI和应⽤程序连接到数据访问代码的功能。
4.构建GUI
在此步骤中,将构建没有按钮的数据库访问和动作事件处理程序的GUI。 仅将列表连接到列表选择更改侦听器。
该应⽤程序在列表中显⽰⼀些预定义的待办事项数据。 可以选择待办事项列表,相应的待办事项名称和说明将显⽰在它们各⾃的⽂本框/区域中。
下⾯显⽰了TodoApp.java类的代码及其说明。
4.1。守则
TodoApp.java:
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.AnchorPane;
import Font;
import FontWeight;
import Text;
import javafx.scene.paint.Color;
import l.ListView;
import l.Label;
import l.TextField;
import l.TextArea;
import l.ScrollPane;
import l.ScrollPane.ScrollBarPolicy;
import l.Button;
import l.Tooltip;
import Text;
ry.Pos;
ry.Insets;
llections.FXCollections;
llections.ObservableList;
import java.util.List;
import java.util.ArrayList;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
public class TodoApp extends Application {
private ListView<Todo> listView;
private ObservableList<Todo> data;
private TextField nametxt;
private TextArea desctxt;
private Text actionstatus;
public static void main(String [] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Todo App - version 1");
// gridPane layout
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setAlignment(Pos.CENTER);
grid.setHgap(15);
grid.setVgap(20);
grid.setPadding(new Insets(25, 25, 25, 25));
// list view, listener and list data
listView = new ListView<>();
data = getListData();
listView.setItems(data);
grid.add(listView, 1, 1); // col = 1, row = 1
// todo name label and text fld - in a hbox
Label namelbl = new Label("Todo Name:");
nametxt = new TextField();
nametxt.setMinHeight(30.0);
nametxt.setPromptText("Enter todo name (required).");
nametxt.setPrefColumnCount(20);
nametxt.setTooltip(new Tooltip(
"Item name (5 to 50 chars length)"));
HBox hbox = new HBox();
hbox.setSpacing(10);
// todo desc text area in a scrollpane
desctxt = new TextArea();
desctxt.setPromptText("Enter description (optional).");
desctxt.setWrapText(true);
ScrollPane sp = new ScrollPane();
sp.setContent(desctxt);
sp.setFitToWidth(true);
sp.setFitToHeight(true);
sp.setPrefHeight(300);
sp.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
sp.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);
// todo hbox (label + text fld), scrollpane - in a vbox
VBox vbox = new VBox();
vbox.setSpacing(10);
grid.add(vbox, 2, 1); // col = 2, row = 1
// new and delete buttons
Button newbtn = new Button("New");
Button delbtn = new Button("Delete");
HBox hbox2 = new HBox(10);
grid.add(hbox2, 1, 2); // col = 1, row = 2
// save button to the right anchor pane and grid
Button savebtn = new Button("Save");
AnchorPane anchor = new AnchorPane();
AnchorPane.setRightAnchor(savebtn, 0.0);
grid.add(anchor, 2, 2); // col = 2, row = 2
// action message (status) text
actionstatus = new Text();
actionstatus.setFill(Color.FIREBRICK);
actionstatus.setText("");
grid.add(actionstatus, 1, 3); // col = 1, row = 3
// scene
Scene scene = new Scene(grid, 750, 400); // width=750, height=400
Scene scene = new Scene(grid, 750, 400); // width=750, height=400
primaryStage.setScene(scene);
primaryStage.show();
// initial selection; statement does nothing if no data
} // start()
private class ListSelectChangeListener implements ChangeListener<Number> {
@Override
public void changed(ObservableValue<? extends Number> ov,
Number old_val, Number new_val) {
if ((new_val.intValue() < 0) || (new_val.intValue() >= data.size())) {
return; // invalid data
}
// set name and desc fields for the selected todo
Todo todo = (new_val.intValue());
nametxt.Name());
desctxt.Desc());
actionstatus.Name() + " - selected");
}
}
private ObservableList<Todo> getListData() {
List<Todo> list = new ArrayList<>(); // initial list data
list.add(new Todo("Work", "Work on JCG's example article."));
list.add(new Todo("Grocery", "Get apples, milk and bread."));
list.add(new Todo("Calls", "Call kid brother."));
list.add(new Todo("Read book",
"Magnificent Obcession, by Lloyd C. Douglas."));
ObservableList<Todo> data = FXCollections.observableList(list);
return data;
}
}
代码说明
4.2.1 JavaFX类
下⾯介绍了⽤于构建GUI的JavaFX类:
Stage类⽤于构建应⽤程序的主窗⼝。
GridPane⽤于在⾏和列的⽹格中布局控件(按钮,⽂本字段等)。
HBox和VBox将其⼦控件布置在单个⽔平或垂直⾏中。
ListView⽤于显⽰待办事项的垂直可滚动列表,⽤户可以从中进⾏选择。
Label和Text⽤于待办事项名称标签和⽂本字段。
TextArea⽤于待办事项描述字段。 该字段放置在ScrollPane ,以便可以滚动⽂本。
Button控件⽤于新建,保存和删除按钮。
Text⽤于显⽰操作状态。
4.2.2控件布局
⽹格窗格布局具有3⾏和2列。 放置控件的单元格如下:
第1⾏第1⾏具有列表视图。
Todo标签和⽂本字段位于hbox中。
第1⾏第2⾏在vbox中具有hbox和todo描述⽂本区域。
第2⾏第1⾏在hbox中具有“新建”和“删除”按钮。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论