天天看點

Java實戰之圖書管理系統(JavaFX版)(9)——圖書維護界面及功能實作

本節概要

在上一節中實作了圖書添加功能,而在本節将實作圖書維護界面以及圖書記錄的查詢、修改和删除。

建立實體類

由于要将資料庫查詢到的記錄顯示到表格中,但是JavaFX中表格顯示資料的類型不同,是以需要再建立實體類。

在beans包建立BookBeanTableData.java類,其内容如下:

package BookManageSystem.beans;
​
import javafx.beans.property.SimpleStringProperty;
​
public class BookBeanTableData {
    private SimpleStringProperty bookId;
    private  SimpleStringProperty bookName;
    private  SimpleStringProperty bookAuthor;
    private SimpleStringProperty bookAuthorSex;
    private SimpleStringProperty bookPrice;
    private SimpleStringProperty bookDescription;
    private SimpleStringProperty bookType;
​
    public BookBeanTableData() {}
​
    public BookBeanTableData(String bookId, String bookName, String bookAuthor, String bookAuthorSex, String bookPrice, String bookDescription, String bookType) {
        this.bookId = new SimpleStringProperty(bookId);
        this.bookName = new SimpleStringProperty(bookName);
        this.bookAuthor = new SimpleStringProperty(bookAuthor);
        this.bookAuthorSex = new SimpleStringProperty(bookAuthorSex);
        this.bookPrice = new SimpleStringProperty(bookPrice);
        this.bookDescription = new SimpleStringProperty(bookDescription);
        this.bookType = new SimpleStringProperty(bookType);
    }
​
    public String getBookId() {
        return bookId.get();
    }
​
    public SimpleStringProperty bookIdProperty() {
        return bookId;
    }
​
    public void setBookId(String bookId) {
        this.bookId.set(bookId);
    }
​
    public String getBookName() {
        return bookName.get();
    }
​
    public SimpleStringProperty bookNameProperty() {
        return bookName;
    }
​
    public void setBookName(String bookName) {
        this.bookName.set(bookName);
    }
​
    public String getBookAuthor() {
        return bookAuthor.get();
    }
​
    public SimpleStringProperty bookAuthorProperty() {
        return bookAuthor;
    }
​
    public void setBookAuthor(String bookAuthor) {
        this.bookAuthor.set(bookAuthor);
    }
​
    public String getBookAuthorSex() {
        return bookAuthorSex.get();
    }
​
    public SimpleStringProperty bookAuthorSexProperty() {
        return bookAuthorSex;
    }
​
    public void setBookAuthorSex(String bookAuthorSex) {
        this.bookAuthorSex.set(bookAuthorSex);
    }
​
    public String getBookPrice() {
        return bookPrice.get();
    }
​
    public SimpleStringProperty bookPriceProperty() {
        return bookPrice;
    }
​
    public void setBookPrice(String bookPrice) {
        this.bookPrice.set(bookPrice);
    }
​
    public String getBookDescription() {
        return bookDescription.get();
    }
​
    public SimpleStringProperty bookDescriptionProperty() {
        return bookDescription;
    }
​
    public void setBookDescription(String bookDescription) {
        this.bookDescription.set(bookDescription);
    }
​
    public String getBookType() {
        return bookType.get();
    }
​
    public SimpleStringProperty bookTypeProperty() {
        return bookType;
    }
​
    public void setBookType(String bookType) {
        this.bookType.set(bookType);
    }
}
           

Dao層方法

由于需要對資料庫表的記錄進行查詢,是以在BookDao中添加如下方法:

   /**
     * 操作結果:根據參數sql擷取資料庫記錄資料
     *
     * @param sql SQL語句
     * @return List 傳回包含記錄Records對象的集合
     */
    public List getRecordsDataBySql(String sql) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List list = new ArrayList();
        try {
            //獲得資料的連接配接
            conn = JDBCUtils.getConnection();
            //獲得Statement對象
            stmt = conn.createStatement();
            //發送SQL語句
            rs = stmt.executeQuery(sql);
            while (rs.next()) {
                BookBean bookBean = new BookBean();
                // 索引是從1開始的
                bookBean.setBookId(rs.getInt(1));
                bookBean.setBookName(rs.getString(2));
                bookBean.setBookAuthor(rs.getString(3));
                bookBean.setBookAuthorSex(rs.getString(4));
                bookBean.setBookPrice(rs.getFloat(5));
                bookBean.setBookDescription(rs.getString(6));
                bookBean.setBookTypeId(rs.getString(7));
                list.add(bookBean);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.release(rs, stmt, conn);
        }
        return list;
    }
           

實作對圖書記錄的查詢根據SQL語句。

界面設計

接下來就是建立圖書維護界面了,在view包下建立bookManageFrame.fxml檔案,使用Scene Builder進行設計,代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
​
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.Font?>
<AnchorPane prefHeight="700.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
            fx:controller="BookManageSystem.controller.BookManageFrameController">
    <children>
        <VBox alignment="CENTER" prefHeight="700.0" prefWidth="800.0">
            <children>
                <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0">
                    <children>
                        <Label text="圖書維護功能">
                            <font>
                                <Font name="System Bold" size="40.0"/>
                            </font>
                        </Label>
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefHeight="90.0" prefWidth="600.0" spacing="10.0">
                    <children>
                        <Label text="圖書名稱:"/>
                        <TextField fx:id="bookNameTextField" prefHeight="30.0" prefWidth="104.0"/>
                        <Label text="圖書作者:"/>
                        <TextField fx:id="bookAuthorTextField" prefHeight="30.0" prefWidth="94.0"/>
                        <Label text="圖書類别:"/>
                        <ComboBox fx:id="bookTypeComboBox" prefHeight="30.0" prefWidth="107.0" promptText="請選擇"/>
                        <Button fx:id="checkButton" mnemonicParsing="false" onAction="#do_checkButton_event" text="查詢"/>
                        <Button fx:id="resetButton" mnemonicParsing="false" onAction="#do_resetButton_event" text="重置"/>
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefHeight="347.0" prefWidth="600.0">
                    <children>
                        <TableView fx:id="bookManageTableView" prefHeight="200.0" prefWidth="605.0"
                                   tableMenuButtonVisible="true">
                            <columns>
                                <TableColumn fx:id="idTableColumn" prefWidth="75.0" text="編号"/>
                                <TableColumn fx:id="bookNameTableColumn" prefWidth="97.0" text="圖書名稱"/>
                                <TableColumn fx:id="bookAuthorTableColumn" prefWidth="77.0" text="圖書作者"/>
                                <TableColumn fx:id="authorSexTableColumn" prefWidth="71.0" text="作者性别"/>
                                <TableColumn fx:id="bookPriceTableColumn" prefWidth="75.0" text="圖書價格"/>
                                <TableColumn fx:id="bookDescriptionTableColumn" prefWidth="114.0" text="圖書描述"/>
                                <TableColumn fx:id="bookTypeTableColumn" prefWidth="90.0" text="圖書類别"/>
                            </columns>
                        </TableView>
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefHeight="268.0" prefWidth="600.0">
                    <children>
                        <VBox alignment="CENTER" prefHeight="200.0" prefWidth="601.0">
                            <children>
                                <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0">
                                    <children>
                                        <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" spacing="15.0">
                                            <children>
                                                <Label text="編号:"/>
                                                <Label text="價格:"/>
                                            </children>
                                        </VBox>
                                        <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" spacing="10.0">
                                            <children>
                                                <TextField fx:id="idTextField"/>
                                                <TextField fx:id="priceTextField"/>
                                            </children>
                                        </VBox>
                                        <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" spacing="15.0">
                                            <children>
                                                <Label text="圖書名稱:"/>
                                                <Label text="圖書作者:"/>
                                            </children>
                                        </VBox>
                                        <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" spacing="10.0">
                                            <children>
                                                <TextField fx:id="bookNameTextField2" prefHeight="10.0"
                                                           prefWidth="100.0"/>
                                                <TextField fx:id="bookAuthorTextField2"/>
                                            </children>
                                        </VBox>
                                        <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" spacing="15.0">
                                            <children>
                                                <Label text="作者性别:"/>
                                                <Label text="圖書類别:"/>
                                            </children>
                                        </VBox>
                                        <VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0" spacing="10.0">
                                            <children>
                                                <HBox alignment="CENTER" prefHeight="29.0" prefWidth="100.0">
                                                    <children>
                                                        <RadioButton fx:id="maleRadioButton" mnemonicParsing="false"
                                                                     text="男">
                                                            <toggleGroup>
                                                                <ToggleGroup fx:id="sex"/>
                                                            </toggleGroup>
                                                        </RadioButton>
                                                        <RadioButton fx:id="femaleRadioButton" mnemonicParsing="false"
                                                                     text="女" toggleGroup="$sex"/>
                                                    </children>
                                                </HBox>
                                                <HBox alignment="CENTER" prefHeight="28.0" prefWidth="100.0">
                                                    <children>
                                                        <ComboBox fx:id="bookTypeComboBox2" prefHeight="30.0"
                                                                  prefWidth="125.0" promptText="請選擇"/>
                                                    </children>
                                                </HBox>
                                            </children>
                                        </VBox>
                                    </children>
                                </HBox>
                                <HBox alignment="TOP_CENTER" prefHeight="68.0" prefWidth="601.0" spacing="40.0">
                                    <children>
                                        <Label text="圖書描述:"/>
                                        <TextArea fx:id="bookDescriptionTextArea" prefHeight="78.0" prefWidth="449.0"/>
                                    </children>
                                </HBox>
                                <HBox alignment="CENTER" prefHeight="66.0" prefWidth="601.0" spacing="100.0">
                                    <children>
                                        <Button fx:id="alterButton" mnemonicParsing="false"
                                                onAction="#do_alterButton_event" text="修改"/>
                                        <Button fx:id="delteButton" mnemonicParsing="false"
                                                onAction="#do_delteButton_event" text="删除"/>
                                        <Button fx:id="resetButton2" mnemonicParsing="false"
                                                onAction="#do_resetButton2_event" text="重置"/>
                                    </children>
                                </HBox>
                            </children>
                        </VBox>
                    </children>
                </HBox>
            </children>
        </VBox>
    </children>
</AnchorPane>
           

并且在controller包下建立BookManageFrameController.java類,從Scene Builder中複制控制器代碼到該類中,并執行個體化SimpleTools和BookDao兩個類:

package BookManageSystem.controller;
​
import BookManageSystem.beans.BookBeanTableData;
import BookManageSystem.beans.BookTypeBean;
import BookManageSystem.dao.BookDao;
import BookManageSystem.dao.BookTypeDao;
import BookManageSystem.tools.SimpleTools;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*;
​
import java.util.List;
​
public class BookManageFrameController {
​
    private SimpleTools simpleTools = new SimpleTools();
    private BookDao bookDao = new BookDao();
​
    @FXML
    private TextField idTextField;
​
    @FXML
    private Button alterButton;
​
    @FXML
    private RadioButton maleRadioButton;
​
    @FXML
    private RadioButton femaleRadioButton;
​
    @FXML
    private TextField bookAuthorTextField2;
​
    @FXML
    private ComboBox bookTypeComboBox2;
​
    @FXML
    private TableColumn<BookBeanTableData, String> idTableColumn;
​
    @FXML
    private TableColumn<BookBeanTableData, String> authorSexTableColumn;
​
    @FXML
    private TableColumn<BookBeanTableData, String> bookPriceTableColumn;
​
    @FXML
    private ComboBox<?> bookTypeComboBox;
​
    @FXML
    private Button checkButton;
​
    @FXML
    private Button resetButton;
​
    @FXML
    private Button resetButton2;
​
    @FXML
    private TableColumn<BookBeanTableData, String> bookAuthorTableColumn;
​
    @FXML
    private TableView<BookBeanTableData> bookManageTableView;
​
    @FXML
    private TextArea bookDescriptionTextArea;
​
    @FXML
    private TextField bookAuthorTextField;
​
    @FXML
    private TableColumn<BookBeanTableData, String> bookNameTableColumn;
​
    @FXML
    private TableColumn<BookBeanTableData, String> bookDescriptionTableColumn;
​
    @FXML
    private TextField bookNameTextField2;
​
    @FXML
    private TextField priceTextField;
​
    @FXML
    private Button delteButton;
​
    @FXML
    private TextField bookNameTextField;
​
    @FXML
    private TableColumn<BookBeanTableData, String> bookTypeTableColumn;
​
    // 【查詢】按鈕的事件監聽器
    public void do_checkButton_event(ActionEvent event) {
     
    }
​
    // 【修改】按鈕的事件監聽器
    public void do_alterButton_event(ActionEvent event) {
   
    }
​
    // 【删除】按鈕的事件監聽器
    public void do_delteButton_event(ActionEvent event) {
   
    }
​
    // 【重置】按鈕的事件監聽器
    public void do_resetButton2_event(ActionEvent event) {
   
    }
​
    // 【重置】按鈕的事件監聽器
    public void do_resetButton_event(ActionEvent event) {
  
    }
}
           

界面效果如下:

Java實戰之圖書管理系統(JavaFX版)(9)——圖書維護界面及功能實作

初始化表格資料

在BookManageFrameController.java中添加如下方法初始化表格資料,即将從資料庫查詢的記錄顯示在表格中。

   /**
     * 初始化圖書維護界面控件
     */
    public void initialize() {
        // 批量為按鈕添加圖示
        simpleTools.setLabeledImage(new Labeled[]{alterButton, delteButton, resetButton2}, new String[]{"src/BookManageSystem/images/edit" +
                ".png",
                "src/BookManageSystem/images/delete.png", "src/BookManageSystem/images/reset.png"});
        // 設定顯示id号的文本框不可編輯
        idTextField.setDisable(true);
        // 查詢圖書資訊的SQL語句
        String sql = "select bId,bBookName,bAuthor,bSex,bPrice,bBookDescription,btName from tb_book,tb_booktype where tb_book.btId=tb_booktype.btId;";
        // 填充表格資料,初始化表格視圖
        simpleTools.setBookTableViewData(bookManageTableView
                , simpleTools.getBookTableViewData(sql)
                , idTableColumn
                , bookNameTableColumn
                , bookAuthorTableColumn
                , authorSexTableColumn
                , bookPriceTableColumn
                , bookDescriptionTableColumn
                , bookTypeTableColumn
        );
​
        // 查詢圖書類别的SQL語句
        String getBookTypeSQL = "select * from tb_booktype";
        List bookTypeList = new BookTypeDao().getRecordsDataBySql(getBookTypeSQL);
        String[] typeNames = new String[bookTypeList.size()];
        for (int i = 0; i < bookTypeList.size(); i++) {
            BookTypeBean bookTypeBean = (BookTypeBean) bookTypeList.get(i);
            typeNames[i] = bookTypeBean.getBookTypeName();
        }
        // 為下拉清單框填充選項
        simpleTools.addComboBoxItems(bookTypeComboBox, typeNames);
        simpleTools.addComboBoxItems(bookTypeComboBox2, typeNames);
    }
           

initialize方法初始化了按鈕的圖示,下拉清單框的選項和表格的資料。

由于要填充資料到JavaFX的表格控件中,是以在SimpleTools.java類中寫了兩個方法來填充資料,代碼如下:

   /**
     * 将資料顯示在圖書表格中
     *
     * @param tableView         表格視圖控件
     * @param data              要顯示要表格上的資料
     * @param idColumn          ID表格列控件
     * @param nameColumn        圖書名字表格列控件
     * @param authorColumn      圖書作者表格列控件
     * @param sexColumn         圖書作者性别表格列控件
     * @param priceColumn       圖書價格表格列控件
     * @param descriptionColumn 圖書描述表格列控件
     * @param typeColumn        圖書類别表格列控件
     */
    public void setBookTableViewData(TableView tableView, ObservableList data, TableColumn<BookBeanTableData, String> idColumn, TableColumn<BookBeanTableData, String> nameColumn, TableColumn<BookBeanTableData, String> authorColumn, TableColumn<BookBeanTableData, String> sexColumn, TableColumn<BookBeanTableData, String> priceColumn, TableColumn<BookBeanTableData, String> descriptionColumn, TableColumn<BookBeanTableData, String> typeColumn) {
        // 設定id列的資料
        idColumn.setCellValueFactory(cellData -> cellData.getValue().bookIdProperty());
        // 設定圖書名稱列的資料
        nameColumn.setCellValueFactory(cellData -> cellData.getValue().bookNameProperty());
        // 設定圖書作者列的資料
        authorColumn.setCellValueFactory(cellData -> cellData.getValue().bookAuthorProperty());
        // 設定圖書作者性别列的資料
        sexColumn.setCellValueFactory(cellData -> cellData.getValue().bookAuthorSexProperty());
        // 設定圖書價格列的資料
        priceColumn.setCellValueFactory(cellData -> cellData.getValue().bookPriceProperty());
        // 設定圖書描述列的資料
        descriptionColumn.setCellValueFactory(cellData -> cellData.getValue().bookDescriptionProperty());
        // 設定圖書類别列的資料
        typeColumn.setCellValueFactory(cellData -> cellData.getValue().bookTypeProperty());
        // 将資料設定到表格視圖
        tableView.setItems(data);
    }
​
    /**
     * 通過SQL從資料庫表中查詢圖書資料并進行封裝
     *
     * @param sql SQL語句
     * @return 傳回ObservableList<BookBeanTableData>類型的資料
     */
    public ObservableList<BookBeanTableData> getBookTableViewData(String sql) {
        BookDao bookDao = new BookDao();
        List list = bookDao.getRecordsDataBySql(sql);
        ObservableList<BookBeanTableData> data = FXCollections.observableArrayList();
        for (int i = 0; i < list.size(); i++) {
            BookBean r = (BookBean) list.get(i);
            BookBeanTableData td = new BookBeanTableData(String.valueOf(r.getBookId()), r.getBookName(), r.getBookAuthor(), r.getBookAuthorSex(), String.valueOf(r.getBookPrice()), r.getBookDescription(), String.valueOf(r.getBookTypeId()));
            data.add(td);
        }
        return data;
    }
           

接着就是讓圖書維護菜單項點選後,切換到該界面。

是以在MainApp.java中添加如下方法加載圖書維護界面的FXML檔案:

   /**
     * 圖書維護界面
     * @return 傳回一個AnchorPane便于其他控件調用
     */
    public AnchorPane initBookManageFrame() {
        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("view/bookManageFrame.fxml"));
            AnchorPane root = loader.load();
            return root;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
           

并在MainFrameController.java中的圖書維護菜單項事件中調用起來,是以do_bookManageMenuItem_event方法的代碼如下:

   /**
     * “圖書維護”菜單項的事件處理
     * @param event 事件
     */
    public void do_bookManageMenuItem_event(ActionEvent event) {
        // 當點選“圖書維護”菜單項後,加載圖書維護面闆
        AnchorPane pane = new MainApp().initBookManageFrame();
        // 清空界面上原有的控件
        mainFrameAnchorPane.getChildren().clear();
        // 将圖書維護面闆添加到界面上
        mainFrameAnchorPane.getChildren().add(pane);
    }
           

到此,運作程式點選“圖書維護”菜單項該界面就會出現了

Java實戰之圖書管理系統(JavaFX版)(9)——圖書維護界面及功能實作

選中表格行顯示資料

接下來是實作當使用者選中表格中某一行時,将該行的資料顯示在下面的文本框中。

在BookManageFrameController.java中添加如下方法用來将選中行的内容顯示在下面的文本框中:

   // 選中某行後行内容顯示在下面文本框中
    public void showBookDetails(BookBeanTableData bookBeanTableData) {
        // 判斷使用者是否選中表格中的某一行
        if (bookManageTableView.getSelectionModel().getSelectedIndex() < 0) {
            return;
        } else {
            // 如果選中表格中的某一行,則将選中行的資料顯示在下面的文本框中
            idTextField.setText(bookBeanTableData.getBookId());
            bookNameTextField2.setText(bookBeanTableData.getBookName());
            if (bookBeanTableData.getBookAuthorSex().equals("男")) {
                maleRadioButton.setSelected(true);
            } else if (bookBeanTableData.getBookAuthorSex().equals("女")) {
                femaleRadioButton.setSelected(true);
            }
            priceTextField.setText(bookBeanTableData.getBookPrice());
            bookAuthorTextField2.setText(bookBeanTableData.getBookAuthor());
            // 設定分類
            String str = bookBeanTableData.getBookType();
            int index = 0;
            List inputList = FXCollections.observableArrayList(bookTypeComboBox.getItems());
            for (int i = 0; i < inputList.size(); i++) {
                if (str.equals(inputList.get(i))) {
                    index = i;
                }
            }
            bookTypeComboBox2.getSelectionModel().select(index);
            bookDescriptionTextArea.setText(bookBeanTableData.getBookDescription());
        }
    }
           

接着在initialize方法中調用這個方法,添加如下代碼:

// 為表格注冊事件監聽器
        bookManageTableView.getSelectionModel().selectedItemProperty().addListener(
                (observable, oldValue, newValue) -> showBookDetails(newValue));
           

運作如下:

Java實戰之圖書管理系統(JavaFX版)(9)——圖書維護界面及功能實作

查詢功能

點選“查詢”按鈕,表格顯示使用者查詢得來的資料。

其事件處理代碼如下:

   // 【查詢】按鈕的事件監聽器
    public void do_checkButton_event(ActionEvent event) {
        // 查詢SQL語句
        String sql = "select bId,bBookName,bAuthor,bSex,bPrice,bBookDescription,btName from tb_book,tb_booktype where" +
                " tb_book.btId=tb_booktype.btId ";
        // 判斷使用者是否輸入圖書名稱,模糊查詢
        if (!simpleTools.isEmpty(bookNameTextField.getText())) {
            sql += " and bBookName like '%" + bookNameTextField.getText() + "%'";
        }
        // 判斷使用者是否輸入作者名稱,模糊查詢
        if (!simpleTools.isEmpty(bookAuthorTextField.getText())) {
            sql += " and bAuthor like '%" + bookAuthorTextField.getText() + "%'";
        }
        // 判斷使用者是否選擇圖書類别
        String booktype = (String) bookTypeComboBox.getSelectionModel().selectedItemProperty().getValue();
        if (!simpleTools.isEmpty(booktype)) {
            sql += " and btName='" + booktype + "';";
        }
        // 通過SQL語句查詢到的資料重新填充表格,重新整理表格顯示的資料
        simpleTools.setBookTableViewData(bookManageTableView
                , simpleTools.getBookTableViewData(sql)
                , idTableColumn
                , bookNameTableColumn
                , bookAuthorTableColumn
                , authorSexTableColumn
                , bookPriceTableColumn
                , bookDescriptionTableColumn
                , bookTypeTableColumn
        );
    }
           

運作,輸入查詢條件進行查詢,結果如下:

Java實戰之圖書管理系統(JavaFX版)(9)——圖書維護界面及功能實作

修改功能

修改圖書記錄。

其事件處理代碼在BookManageFrameController.java中如下:

   // 【修改】按鈕的事件監聽器
    public void do_alterButton_event(ActionEvent event) {
        // 擷取使用者輸入的修改資料
        String id = idTextField.getText();
        String bookName = bookNameTextField2.getText();
        String authorSex = "";
        if (maleRadioButton.isSelected()) {
            authorSex = maleRadioButton.getText();
        } else if (femaleRadioButton.isSelected()) {
            authorSex = femaleRadioButton.getText();
        }
        String price = priceTextField.getText();
        String bookAuthor = bookAuthorTextField2.getText();
        String bookType = (String) bookTypeComboBox2.getSelectionModel().selectedItemProperty().getValue();
        String description = bookDescriptionTextArea.getText();
        // 組裝SQL語句
        String bookTypeSQL = "select * from tb_booktype where btName='" + bookType + "';";
        List bookTypeList = new BookTypeDao().getRecordsDataBySql(bookTypeSQL);
        BookTypeBean bookTypeBean = (BookTypeBean) bookTypeList.get(0);
        // 擷取圖書類别id
        int bookTypeId = bookTypeBean.getBookTypeId();
        // 組裝修改SQL語句
        String alterSQL =
                "update tb_book set bBookName='" + bookName + "',bAuthor='" + bookAuthor + "',bSex='" + authorSex +
                        "',bPrice=" + price + ",bBookDescription='" + description + "',btId=" + bookTypeId + " where " +
                        "bId=" + id + ";";
        // 執行SQL語句并傳回結果
        boolean isOK = bookDao.dataChange(alterSQL);
        // 對結果進行判斷
        if (isOK) {
            // 修改成功則重新重新整理表格,并重置使用者輸入
            initialize();
            do_resetButton2_event(null);
            simpleTools.informationDialog(Alert.AlertType.INFORMATION, "提示", "資訊", "修改成功!");
        } else {
            // 修改失敗則彈出提示框
            simpleTools.informationDialog(Alert.AlertType.ERROR, "提示", "錯誤", "修改失敗!");
        }
    }
           

執行效果如下:

Java實戰之圖書管理系統(JavaFX版)(9)——圖書維護界面及功能實作
Java實戰之圖書管理系統(JavaFX版)(9)——圖書維護界面及功能實作

删除功能

删除選中的表格行記錄。

其事件處理代碼如下:

   // 【删除】按鈕的事件監聽器
    public void do_delteButton_event(ActionEvent event) {
        // 擷取id文本框的值
        String id = idTextField.getText();
        // 組裝SQL語句,通過id來删除記錄
        String deleteSQL = "delete from tb_book where bId=" + id + ";";
        // 執行删除操作
        boolean isOK = bookDao.dataChange(deleteSQL);
        // 對結果進行判斷處理
        if (isOK) {
            // 删除成功則重新整理表格
            initialize();
            do_resetButton2_event(null);
            simpleTools.informationDialog(Alert.AlertType.INFORMATION, "提示", "資訊", "删除成功!");
        } else {
            // 删除失敗彈出提示框
            simpleTools.informationDialog(Alert.AlertType.ERROR, "提示", "錯誤", "删除失敗!");
        }
    }
           
Java實戰之圖書管理系統(JavaFX版)(9)——圖書維護界面及功能實作

重置功能

界面上有兩個重置按鈕,其事件處理代碼如下:

   // 【重置】按鈕的事件監聽器
    public void do_resetButton2_event(ActionEvent event) {
        // 清空使用者輸入
        simpleTools.clearTextField(idTextField, bookNameTextField2, priceTextField, bookAuthorTextField2,
                bookDescriptionTextArea);
        simpleTools.clearSelectedRadioButton(femaleRadioButton, maleRadioButton);
        simpleTools.clearSelectedComboBox(bookTypeComboBox2);
    }
​
    // 【重置】按鈕的事件監聽器
    public void do_resetButton_event(ActionEvent event) {
        // 清空使用者并重新整理表格
        simpleTools.clearTextField(bookNameTextField, bookAuthorTextField);
        simpleTools.clearSelectedComboBox(bookTypeComboBox);
        initialize();
    }
           
Java實戰之圖書管理系統(JavaFX版)(9)——圖書維護界面及功能實作

可搜尋微信公衆号【Java執行個體程式】或者掃描下方二維碼關注公衆号擷取更多。

注意:在公衆号背景回複【20200303】擷取本節源碼。

Java實戰之圖書管理系統(JavaFX版)(9)——圖書維護界面及功能實作