Java实战之管家婆记账系统(15)——按备注条件查询界面及功能实现

本节概要

本节主要讲条件查询之按照备注进行条件查询,用户输入备注的一些文本就可以进行模糊查询了。

创建界面

在view包下创建memoCheckFrame.fxml文件,使用Scene Builder设计界面,各个控件的属性和方法参考下面的代码:

<?xml version="1.0" encoding="UTF-8"?>
​
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="600.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8"
            xmlns:fx="http://javafx.com/fxml/1" fx:controller="AccountSystem.controller.MemoCheckFrameController">
    <children>
        <HBox alignment="CENTER" prefHeight="91.0" prefWidth="600.0" spacing="50.0">
            <children>
                <TextField fx:id="memo_memoTextField" promptText="请填入备注:"/>
                <Button fx:id="memo_checkButton" mnemonicParsing="false" onAction="#memo_checkButtonEvent" text="查询"/>
            </children>
        </HBox>
        <HBox alignment="CENTER" layoutY="91.0" prefHeight="20.0" prefWidth="600.0">
            <children>
                <Separator prefHeight="2.0" prefWidth="598.0"/>
            </children>
        </HBox>
        <TableView fx:id="memo_tableView" layoutY="111.0" prefHeight="500.0" prefWidth="600.0">
            <columns>
                <TableColumn fx:id="memo_idColumn" prefWidth="60.0" text="序号"/>
                <TableColumn fx:id="memo_typeColumn" prefWidth="71.0" text="类型"/>
                <TableColumn fx:id="memo_moneyColumn" prefWidth="63.0" text="金额"/>
                <TableColumn fx:id="memo_classificationColumn" prefWidth="108.0" text="分类"/>
                <TableColumn fx:id="memo_memoColumn" prefWidth="161.0" text="备注"/>
                <TableColumn fx:id="memo_dateColumn" prefWidth="125.0" text="日期"/>
            </columns>
        </TableView>
    </children>
</AnchorPane>

接着是在controller包下创建与之对应的控制器类MemoCheckFrameController.java,并从Scene Builder中复制该界面的组件对象和事件方法代码到该控制器类中:

package AccountSystem.controller;
​
import AccountSystem.bean.Session;
import AccountSystem.bean.TableData;
import AccountSystem.tools.PublicTools;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
​
public class MemoCheckFrameController {
    private PublicTools publicTools = new PublicTools();
​
    @FXML
    private TableColumn<TableData, String> memo_classificationColumn;
​
    @FXML
    private TableColumn<TableData, String> memo_moneyColumn;
​
    @FXML
    private TableColumn<TableData, String> memo_dateColumn;
​
    @FXML
    private TextField memo_memoTextField;
​
    @FXML
    private TableView<TableData> memo_tableView;
​
    @FXML
    private TableColumn<TableData, String> memo_idColumn;
​
    @FXML
    private TableColumn<TableData, String> memo_typeColumn;
​
    @FXML
    private TableColumn<TableData, String> memo_memoColumn;
​
    /**
     * ”查询“按钮的事件监听方法
     *
     * @param event 事件
     */
    @FXML
    public void memo_checkButtonEvent(ActionEvent event) {
      
    }
}

只有一个事件监听器,即“查询”按钮的事件监听器方法。

再接着就是在MainApp.java中创建方法加载FXML文件:

    /**
     * 操作结果:”按备注查询“结果界面
     */
    public Scene initMemoTableView() {
        try {
            Parent page = FXMLLoader.load(getClass().getResource("view/memoCheckFrame.fxml"));
​
            Stage mainFrameStage = new Stage();
            mainFrameStage.setTitle("按备注查询");
            mainFrameStage.setResizable(true);
            mainFrameStage.setAlwaysOnTop(false);
            mainFrameStage.initModality(Modality.APPLICATION_MODAL);
            mainFrameStage.initOwner(primaryStage);
            Scene scene = new Scene(page);
            mainFrameStage.setScene(scene);
​
            mainFrameStage.showAndWait();
            return scene;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

最后就是调用这个加载FXML成功的方法,就是在按备注查询菜单项事件中进行调用,是在MainPageController.java中的memoCheckMenuItemEvent()方法中:

    /**
     * ”按备注查询“菜单项的事件监听器
     *
     * @param event 事件
     */
    @FXML
    public void memoCheckMenuItemEvent(ActionEvent event) {
        // 打开按备注查询界面
        mainApp.initMemoTableView();
    }

成功调用后,运行程序,就可以出现按备注查询的界面了:

实现功能

实现模糊查询的功能,就是在memo_checkButtonEvent()方法中进行处理,获取用户输入的备注信息,然后拼接SQL语句,在数据库中进行模糊查询,将查询得到的数据填充到表格控件中。

    /**
     * ”查询“按钮的事件监听方法
     *
     * @param event 事件
     */
    @FXML
    public void memo_checkButtonEvent(ActionEvent event) {
        // 获取用户输入的备注
        String memo = memo_memoTextField.getText();
        // 拼接SQL语句
        String sql = "select* from tb_records where rMemo like '%" + memo + "%' and uId=" + Session.getUser().getUserId() + ";";
        // 填充数据到表格控件中
        publicTools.public_initTableViewData(memo_tableView
                , publicTools.public_getTableViewData(sql)
                , memo_idColumn
                , memo_typeColumn
                , memo_moneyColumn
                , memo_classificationColumn
                , memo_memoColumn
                , memo_dateColumn);
    }

代码写完后,运行程序,测试功能:

查询成功,结果显示在表格中。

可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【20200409】可获取本章的源码。

发布了505 篇原创文章 · 获赞 81 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/cnds123321/article/details/104301634
今日推荐