日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

javafx 示例_JavaFX列表示例

發布時間:2023/12/3 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javafx 示例_JavaFX列表示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

javafx 示例

這是使用JavaFX構建的示例列表應用程序。 該應用程序是待辦事項列表。 該應用程序具有添加,更新和刪除列表中項目的功能。 列表數據存儲在HSQLDB關系數據庫中。 該應用程序使用JDBC(Java數據庫連接)API訪問數據庫。 該應用程序打包為可執行JAR文件。

JavaFX 2.2,Java SE 7和HSQLDB 2.3.2用于構建應用程序。



本文詳細介紹了構建應用程序。 本文件內容:

目錄

1.安裝HSQL數據庫
1.1。 關于HSQLDB 1.2。 下載資料庫
2.創建應用數據庫和表
2.1。 創建待辦事項數據庫 2.2。 創建待辦事項表
3.申請
3.1。 應用類別
4.構建GUI
4.1。 代碼 4.2。 代碼說明 4.3。 源代碼
5.創建數據庫訪問代碼
5.1。 獲取連接 5.2。 獲取所有行 5.3。 插入行 5.4。 檢查Todo名稱是否存在 5.5。 刪除行 5.6。 更新行 5.7。 關閉數據庫 5.8。 源代碼
6.通過數據庫訪問連接GUI
6.1。 編碼 6.2。 創建一個新的待辦事項 6.3。 保存待辦事項 6.4。 刪除或取消待辦事項 6.5。 應用啟動和關閉 6.6。 源代碼
7.部署為JAR文件
7.1。 創建可執行的JAR文件:todoapp.jar 7.2。 運行應用
8.下載Java源代碼

1.安裝HSQL數據庫

關于HSQLDB

HSQL關系數據庫用于存儲待辦事項數據。 在本節中–獲取并安裝數據庫。

HSQLDB(HyperSQL數據庫)是用Java編寫SQL關系數據庫軟件,可在JVM中運行。 它是一個小型,快速的多線程事務型數據庫引擎,具有基于內存和基于磁盤的表,并支持嵌入式和服務器模式。 這包括JDBC驅動程序。

下載資料庫

從網站http://hsqldb.org/上的下載鏈接下載數據庫軟件。 在這種情況下,將下載HSQLDB版本2.3.2。 下載的文件是一個ZIP文件。 將ZIP文件解壓縮到您選擇的任何目錄中。 該ZIP文件被解壓縮到文件夾hsqldb-2.3.2\hsqldb 。 這是主(或安裝)目錄。

這樣就完成了安裝。 已安裝的數據庫包含用戶文檔,JDBC驅動程序,數據庫可執行文件和實用程序。 安裝目錄具有/doc和/lib目錄(以及其他目錄)。

/doc目錄包含用戶指南。

/lib目錄具有以下常用的JAR文件:

  • hsqldb.jar :它具有數據庫引擎,JDBC驅動程序和GUI數據庫訪問工具。
  • sqltool.jar :這有一個SQL命令行數據庫訪問工具。

2.創建應用數據庫和表

創建待辦事項數據庫

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 javafx.scene.text.Font; import javafx.scene.text.FontWeight; import javafx.scene.text.Text; import javafx.scene.paint.Color; import javafx.scene.control.ListView; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.control.TextArea; import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane.ScrollBarPolicy; import javafx.scene.control.Button; import javafx.scene.control.Tooltip; import javafx.scene.text.Text; import javafx.geometry.Pos; import javafx.geometry.Insets; import javafx.collections.FXCollections; import javafx.collections.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);}@Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("Todo App - version 1");// gridPane layoutGridPane grid = new GridPane();grid.setAlignment(Pos.CENTER);grid.setHgap(15);grid.setVgap(20);grid.setPadding(new Insets(25, 25, 25, 25));// list view, listener and list datalistView = new ListView<>();listView.getSelectionModel().selectedIndexProperty().addListener(new ListSelectChangeListener());data = getListData();listView.setItems(data);grid.add(listView, 1, 1); // col = 1, row = 1// todo name label and text fld - in a hboxLabel 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);hbox.getChildren().addAll(namelbl, nametxt);// todo desc text area in a scrollpanedesctxt = 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);vbox.getChildren().addAll(hbox, sp);grid.add(vbox, 2, 1); // col = 2, row = 1// new and delete buttonsButton newbtn = new Button("New");Button delbtn = new Button("Delete");HBox hbox2 = new HBox(10);hbox2.getChildren().addAll(newbtn, delbtn);grid.add(hbox2, 1, 2); // col = 1, row = 2// save button to the right anchor pane and gridButton savebtn = new Button("Save");AnchorPane anchor = new AnchorPane();AnchorPane.setRightAnchor(savebtn, 0.0);anchor.getChildren().add(savebtn); grid.add(anchor, 2, 2); // col = 2, row = 2// action message (status) textactionstatus = new Text();actionstatus.setFill(Color.FIREBRICK);actionstatus.setText(""); grid.add(actionstatus, 1, 3); // col = 1, row = 3// sceneScene scene = new Scene(grid, 750, 400); // width=750, height=400primaryStage.setScene(scene);primaryStage.show();// initial selection; statement does nothing if no datalistView.getSelectionModel().selectFirst();} // start()private class ListSelectChangeListener implements ChangeListener<Number> {@Overridepublic 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 todoTodo todo = data.get(new_val.intValue());nametxt.setText(todo.getName());desctxt.setText(todo.getDesc());actionstatus.setText(todo.getName() + " - selected"); }}private ObservableList<Todo> getListData() {List<Todo> list = new ArrayList<>(); // initial list datalist.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中具有“新建”和“刪除”按鈕。
  • 第2行第2列具有保存按鈕。
  • 第3行第1行有狀態文本。

4.2.3列表的更改偵聽器

類型為ChangeListener<Number>的列表選擇更改偵聽器已附加到列表視圖:

listView.getSelectionModel().selectedIndexProperty().addListener(new changeListener());

選擇列表項后,該項的待辦事項名稱和說明將顯示在文本字段中。

4.2.4列表數據

列表視圖中填充了來自ObservableList<Todo>集合的數據–在應用程序的start()方法中:

data = getListData();listView.setItems(data);

在本節中,將在程序中創建列表的數據。 getListData()方法創建待辦事項并將其作為ObservableList <Todo>集合返回。

4.3源代碼

這是應用程序的版本1。 新創建了兩個類。 這些類是:

  • Todo.java
  • TodoApp.java

注意:要編譯代碼并運行應用程序, jfxrt.jar (JavaFX庫)文件必須位于類路徑中。 對于Java 7,可以在以下位置找到它: <JRE_HOME>/lib/jfxrt.jar 。

5.創建數據庫訪問代碼

待辦事項列表的數據是從數據庫存儲和訪問的。 TODO_DB數據庫中的TODO_TABLE存儲待辦事項詳細信息。 數據庫和表已經在前面創建(請參閱2.創建應用程序數據庫和表一節 )。 請注意,該應用假定訪問數據庫之前已創建該數據庫。

本節介紹數據庫訪問代碼。 TodoDataAccess.java類具有代碼。 此代碼使用JDBC(Java數據庫連接)API來訪問TODO_DB數據庫。

注意:應用程序的GUI在下一節( 6.使用數據庫訪問連接GUI)中連接到數據庫訪問。

此類具有以下方法:

  • 連接到todo數據庫
  • 關閉待辦事項數據庫
  • 將所有待辦事項表行讀入List集合
  • 在待辦事項表中插入一行
  • 檢查待辦事項表中是否存在待辦事項名稱
  • 從待辦事項表中刪除一行
  • 更新待辦事項表中的一行

下面顯示了TodoDataAccess.java類的代碼和詳細信息。

5.1獲取連接

構造函數具有訪問數據庫并獲取Connection對象的代碼。 此連接對象用于讀取或更新數據庫數據。 連接的屬性設置為自動提交,即,事務在沒有顯式提交的情況下在插入,更新或刪除時提交。 連接是可更新的類型。

DriverManager's getConnection()靜態方法使用URL連接到數據庫。

public TodoDataAccess()throws SQLException, ClassNotFoundException {Class.forName("org.hsqldb.jdbc.JDBCDriver" );conn = DriverManager.getConnection("jdbc:hsqldb:file:db/TODOS_DB;ifexists=true;shutdown=true", "", "");conn.setAutoCommit(true);conn.setReadOnly(false);}

5.2獲取所有行

此方法從todo表中檢索所有行,并返回Todo元素的List集合。

public List<Todo> getAllRows()throws SQLException {String sql = "SELECT * FROM " + todoTable + " ORDER BY name";PreparedStatement pstmnt = conn.prepareStatement(sql);ResultSet rs = pstmnt.executeQuery();List<Todo> list = new ArrayList<>();while (rs.next()) {int i = rs.getInt("id");String s1 = rs.getString("name");String s2 = rs.getString("desc");list.add(new Todo(i, s1, s2));}pstmnt.close(); // also closes related result setreturn list; }

5.3插入一行

此方法將一行插入todo表。 該方法返回新的待辦事項行的ID。

id值是數據庫系統生成的序列號。 這是一個IDENTITY列。 DEFAULT關鍵字(在INSERT語句中)用于IDENTITY列,這將為該列自動生成一個值。 請參閱第2.2節。 創建待辦事項表以獲取有關IDENTITY列創建的詳細信息。

PreparedStatement's getGeneratedKeys()方法使用新生成的標識列值檢索ResultSet 。

public int insertRow(Todo todo)throws SQLException {String dml ="INSERT INTO " + todoTable + " VALUES (DEFAULT, ?, ?)";PreparedStatement pstmnt = conn.prepareStatement(dml,PreparedStatement.RETURN_GENERATED_KEYS);pstmnt.setString(1, todo.getName());pstmnt.setString(2, todo.getDesc());pstmnt.executeUpdate(); // returns insert count// get identity column valueResultSet rs = pstmnt.getGeneratedKeys();rs.next();int id = rs.getInt(1);pstmnt.close();return id;}

5.4檢查Todo名稱是否存在

此方法檢查待辦事項表中是否已存在待辦事項名稱。 請注意,該應用僅允許使用唯一的待辦事項名稱。

public boolean nameExists(Todo todo)throws SQLException {String sql = "SELECT COUNT(id) FROM " + todoTable + " WHERE name = ? AND id <> ?";PreparedStatement pstmnt = conn.prepareStatement(sql);pstmnt.setString(1, todo.getName());pstmnt.setInt(2, todo.getId());ResultSet rs = pstmnt.executeQuery();rs.next();int count = rs.getInt(1);pstmnt.close();if (count > 0) {return true;}return false;}

5.5刪除一行

此方法從給定待辦事項的待辦事項表中刪除一行(如果存在)。 請注意,如果沒有行被刪除,則不會引發異常。

public void deleteRow(Todo todo)throws SQLException {String dml = "DELETE FROM " + todoTable + " WHERE id = ?";PreparedStatement pstmnt = conn.prepareStatement(dml);pstmnt.setInt(1, todo.getId());pstmnt.executeUpdate(); // returns delete count (0 for none)pstmnt.close(); }

5.6更新行

此方法使用待辦事項屬性的任何更改來更新待辦事項表中的現有行。

public void updateRow(Todo todo)throws SQLException {String dml = "UPDATE " + todoTable + " SET name = ?, desc = ? " + " WHERE id = ?";PreparedStatement pstmnt = conn.prepareStatement(dml);pstmnt.setString(1, todo.getName());pstmnt.setString(2, todo.getDesc());pstmnt.setInt(3, todo.getId());pstmnt.executeUpdate(); // returns update countpstmnt.close(); }

5.7關閉數據庫

此方法關閉數據庫連接并關閉數據庫。

public void closeDb()throws SQLException {conn.close();}

5.8源代碼

這是應用程序的版本2。 新創建一個類– TodoDataAccess.java。 其他沒有變化。 這些類是:

  • Todo.java
  • TodoDataAccess.java

注意:這些類已編譯。 沒有要運行的程序。

6.通過數據庫訪問連接GUI

這是完成的應用程序。

該應用程序的GUI已連接到數據庫。 該應用程序已更新,具有以下功能:

將新的待辦事項添加到列表中。

  • 點擊新按鈕; 輸入待辦事項名稱和說明字段。
  • 點擊保存按鈕。 這會將新輸入的待辦事項插入數據庫。 新的待辦事項已添加到列表中。
  • 該應用程序驗證輸入的待辦事項名稱具有5到50個字符的長度,并且在列表中是唯一的。
  • 輸入新的待辦事項時,可以通過單擊刪除按鈕來取消輸入。

更新列表中的待辦事項。

  • 從列表中選擇一個待辦事項。 編輯名稱和/或描述字段。
  • 點擊保存按鈕。 驗證后,這會將更新的待辦事項保存在數據庫中并更新列表。

刪除列表中的待辦事項。

  • 從列表中選擇一個待辦事項。
  • 單擊刪除按鈕。 這將從數據庫和列表中刪除待辦事項。

應用程序啟動和關閉。

  • 在應用程序啟動時,數據庫中的所有待辦事項都將加載到列表中。
  • 在應用程序關閉時,數據庫已關閉。

6.1編碼

在此部分中,應用程序已更新:

  • 新的,保存和刪除按鈕連接到相應的事件處理程序。
  • 處理程序的代碼訪問數據庫。
  • 應用程序的啟動和關閉方法訪問數據庫。

數據庫訪問代碼已在上一節( 5.創建數據庫訪問代碼 )中構建。

6.1.1關于事件處理程序

類型為ActionEvent的事件處理程序用作按鈕的動作事件處理程序。 為此,實現了EventHandler接口。 按鈕的處理程序屬性設置為button.setOnaction(someHandler) 。
這是此應用程序中的三個按鈕的常見功能-新建,刪除和保存。

6.2創建一個新的待辦事項

當用戶單擊新按鈕時,將在列表視圖中創建一個新的待辦事項,應用程序會提示用戶輸入新待辦事項的名稱和說明。

private class NewButtonListener implements EventHandler<ActionEvent> {@Overridepublic void handle(ActionEvent e) {actionstatus.setText("New");// creates a todo at first row with name NEW todo and// selects itTodo todo = new Todo(0, "NEW Todo", ""); // 0 = dummy idint ix = 0;data.add(ix, todo);listView.getSelectionModel().clearAndSelect(ix);nametxt.clear();desctxt.clear();nametxt.setText("NEW Todo");nametxt.requestFocus();}}

6.3保存待辦事項

單擊保存按鈕后,該應用程序:

  • 驗證待辦事項名稱的長度(5至50個字符)
  • 檢查名稱是否已經存在于數據庫中
  • 將待辦事項插入數據庫

請注意,此事件處理程序同時用于插入和更新功能。

private class SaveButtonListener implements EventHandler<ActionEvent> {@Overridepublic void handle(ActionEvent ae) {int ix = listView.getSelectionModel().getSelectedIndex();if (ix < 0) { // no data selected or no datareturn;}String s1 = nametxt.getText();String s2 = desctxt.getText();// validate nameif ((s1.length() < 5) || (s1.length() > 50)) {actionstatus.setText("Name must be 5 to 50 characters in length");nametxt.requestFocus();nametxt.selectAll();return;}// check if name is uniqueTodo todo = data.get(ix);todo.setName(s1);todo.setDesc(s2);if (isNameAlreadyInDb(todo)) {actionstatus.setText("Name must be unique!");nametxt.requestFocus();return;}if (todo.getId() == 0) { // insert in db (new todo)int id = 0;try {id = dbaccess.insertRow(todo);}catch (Exception e) {displayException(e);} todo.setId(id);data.set(ix, todo);actionstatus.setText("Saved (inserted)");}else { // db update (existing todo)try {dbaccess.updateRow(todo);}catch (Exception e) {displayException(e);}actionstatus.setText("Saved (updated)"); } // end-if, insert or update in db// update list view with todo name, and select itdata.set(ix, null); // required for refreshdata.set(ix, todo);listView.getSelectionModel().clearAndSelect(ix);listView.requestFocus();}}private boolean isNameAlreadyInDb(Todo todo) {boolean bool = false;try {bool = dbaccess.nameExists(todo);}catch (Exception e) {displayException(e);} return bool;}

6.4刪除或取消待辦事項

刪除按鈕的操作具有兩個功能:

  • 取消正在輸入但尚未保存的新待辦事項。
  • 從列表和數據庫中刪除選定的(現有)待辦事項。
private class DeleteButtonListener implements EventHandler<ActionEvent> {@Overridepublic void handle(ActionEvent ae) {int ix = listView.getSelectionModel().getSelectedIndex();if (ix < 0) { // no data or none selectedreturn;}Todo todo = data.remove(ix); try {dbaccess.deleteRow(todo);}catch (Exception e) {displayException(e);} actionstatus.setText("Deleted");// set next todo item after deleteif (data.size() == 0) {nametxt.clear();desctxt.clear();return; // no selection} ix = ix - 1; if (ix < 0) {ix = 0;}listView.getSelectionModel().clearAndSelect(ix);// selected ix data (not set by list listener);// requires this is setTodo itemSelected = data.get(ix);nametxt.setText(itemSelected.getName());desctxt.setText(itemSelected.getDesc());listView.requestFocus();}}

6.5應用程序啟動和關閉

JavaFX Application類的init()和stop()方法用于應用程序的初始化和關閉。 這些在應用程序中被覆蓋。 init方法具有在應用程序啟動時訪問數據庫的代碼。 stop方法具有在應用程序關閉時關閉數據庫的代碼。

同樣,在應用程序啟動后,待辦事項列表中會填充數據庫數據(而不是早期版本1中在程序內創建的數據)。 這將替換版本1中的代碼data = getListData()方法的代碼data = getListData()替換為data = getDbData() 。

@Overridepublic void init() {try {dbaccess = new TodoDataAccess();}catch (Exception e) {displayException(e);}}@Overridepublic void stop() {try {dbaccess.closeDb();}catch (Exception e) {displayException(e);}}private ObservableList<Todo> getDbData() {List<Todo> list = null;try {list = dbaccess.getAllRows();}catch (Exception e) {displayException(e);}ObservableList<Todo> dbData = FXCollections.observableList(list);return dbData;}@Overridepublic void start(Stage primaryStage) {...data = getDbData();listView.setItems(data);...

6.6源代??碼

這是應用程序的版本3,并且是最終版本。 一類TodoApp.java被修改。 其他沒有變化。 這些類是:

  • Todo.java
  • TodoDataAccess.java
  • TodoApp.java

注意:

  • 要編譯該應用程序, jfxrt.jar必須在類路徑中。
  • 要運行該應用程序, jfxrt.jar和hsqldb.jar文件必須位于類路徑中。

7.部署為JAR文件

7.1創建可執行的JAR文件:todoapp.jar

帶有createjar命令選項的javafxpackager實用程序用于為該應用創建可執行JAR文件。

  • 創建一個名為: deploy的目錄
  • 在deploy目錄中創建兩個子目錄: src和dest
  • 將所有應用程序的class文件放在src目錄中
  • 導航到deploy目錄,從DOS提示符下運行以下命令:
> javafxpackager -createjar -appclass TodoApp -srcdir src -outdir dest -outfile todoapp -v -classpath hsqldb.jar

這將創建應用程序的可執行JAR文件。 驗證是否在dest目錄中創建了文件todoapp.jar 。

7.2運行應用

將創建的todoapp.jar文件復制到deploy (或任何)目錄中。 請注意,在運行應用程序之前,需要滿足以下條件:

  • 目錄(或類路徑)中的hsqldb.jar file
  • 該應用程序的數據庫和表是預先創建的(請參閱創建應用程序數據庫和表一節 )

通過以下方式之一運行應用程序:

(a)在DOS命令提示符下:

> java -jar todoapp.jar

(b)雙擊todoapp.jar文件。

8.下載Java源代碼

可以從此處下載源代碼的所有三個版本: JavaFX List示例 。

翻譯自: https://www.javacodegeeks.com/2015/01/javafx-list-example.html

javafx 示例

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的javafx 示例_JavaFX列表示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。