本节概要
本节主要讲条件查询之按照备注进行条件查询,用户输入备注的一些文本就可以进行模糊查询了。
创建界面
在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=eckFrameController">
<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);
}
代码写完后,运行程序,测试功能
查询成功,结果显示在表格中。