本节概要
本节主要讲查询所有的记录,即同主界面的表格查询是一样的。
创建界面
在view包下创建tableView.fxml文件,使用Scene Builder设计界面,其中各个控件的属性和事件参考下面的代码:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="600.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="AccountSystem.controller.TableViewController">
<children>
<TableView fx:id="check_tableView" editable="true" layoutY="1.0" prefHeight="600.0" prefWidth="600.0"
tableMenuButtonVisible="true">
<columns>
<TableColumn fx:id="check_idColumn" minWidth="100.0" prefWidth="-1.0" text="序号"/>
<TableColumn fx:id="check_typeColumn" minWidth="100.0" prefWidth="-1.0" text="类型"/>
<TableColumn fx:id="check_moneyColumn" minWidth="100.0" prefWidth="-1.0" text="金额"/>
<TableColumn fx:id="check_classificationColumn" minWidth="100.0" prefWidth="-1.0" text="分类"/>
<TableColumn fx:id="check_memoColumn" minWidth="100.0" prefWidth="-1.0" text="备注"/>
<TableColumn fx:id="check_dateColumn" minWidth="100.0" prefWidth="-1.0" text="日期"/>
</columns>
</TableView>
</children>
</AnchorPane>
然后就是在controller包下创建对应的控制器类TableViewController.java,并从Scene Builder中复制界面组件的对象和事件方法到该控制器类中:
package AccountSystem.controller;
import AccountSystem.bean.Session;
import AccountSystem.bean.TableData;
import AccountSystem.tools.PublicTools;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
/**
* 查询界面控制器
*
* @author lck100
*/
public class TableViewController {
private PublicTools publicTools = new PublicTools();
@FXML
private TableColumn<TableData, String> check_classificationColumn;
@FXML
private TableColumn<TableData, String> check_typeColumn;
@FXML
private TableColumn<TableData, String> check_memoColumn;
@FXML
private TableView<TableData> check_tableView;
@FXML
private TableColumn<TableData, String> check_idColumn;
@FXML
private TableColumn<TableData, String> check_moneyColumn;
@FXML
private TableColumn<TableData, String> check_dateColumn;
}
然后是在MainApp.java中添加如下方法加载tableView.fxml界面:
/**
* 操作结果:查看数据表格界面
*/
public Scene initTableView() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/tableView.fxml"));
AnchorPane page = (AnchorPane) loader.load();
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;
}
加载完成后,就是调用该方法使该界面显示出来,所以MainPageController.java中的checkMenuItemEvent()方法的代码如下:
/**
* ”查询“菜单项的事件监听器
*
* @param actionEvent 事件
*/
@FXML
public void checkMenuItemEvent(ActionEvent actionEvent) {
// 打开查询界面
mainApp.initTableView();
initialize();
}
不初始化任何数据,那么点击“查询”菜单键显示一个空面板:
实现功能
即填充数据到表格中,所以在TableViewController.java中添加初始化方法填充数据:
/**
* 初始化界面表格数据
*/
public void initialize() {
// 初始化表格数据
String sql = "select * from tb_records where uId=" + Session.getUser().getUserId() + ";";
publicTools.public_initTableViewData(check_tableView
, publicTools.public_getTableViewData(sql)
, check_idColumn
, check_typeColumn
, check_moneyColumn
, check_classificationColumn
, check_memoColumn
, check_dateColumn);
}
运行项目,打开的界面如下: