如何解决如何基于 ComboBox 中的 SELECT 项构建 tableview
我正在尝试创建一个根据组合框中所选项目而变化的表格视图。我有 tableview 结构,combobox 可以工作,但是我在尝试使两者之间的连接正常工作时迷失了方向。我对它可能是什么有一些潜在的想法(所以我将把它复制到 //'d out 的代码中)。任何帮助将不胜感激。希望得到解释,以便我理解其中的逻辑以及我没有理解的内容。
目标是从组合框中选择一个客户,然后更新 tableview 以显示他们个人下的所有订单。我的数据库在 MySql 中,我将在下面包含到目前为止我拥有的 sql 脚本。
public void createCustomerInfoReportScene(Stage primaryStage) {
Label titleLBL = new Label("Customer Information");
final ComboBox customerCB = new ComboBox();
CapestraDB myDB = new CapestraDB();
customerCB.setItems(myDB.getCustomerNameList());
customerCB.setPromptText("Select Customer");
Label customerLBL = new Label("Customer Name:");
Label idLBL = new Label("ID: ");
TextField IDTF = new TextField();
Label firstNameLBL = new Label("First Name:");
TextField firstNameTF = new TextField();
Label lastNameLBL = new Label("Last Name: ");
TextField lastNameTF = new TextField();
Label addressLBL = new Label("Address: ");
TextField addressTF = new TextField();
Label cityLBL = new Label("City: ");
TextField cityTF = new TextField();
Label stateLBL = new Label("State: ");
TextField stateTF = new TextField();
Label zipLBL = new Label("Zip code: ");
TextField zipTF = new TextField();
Label phoneLBL = new Label("Phone: ");
TextField phoneTF = new TextField();
Label emailLBL = new Label("E-mail: ");
TextField emailTF = new TextField();
customerCB.setOnAction(e -> {
Customer cus = myDB.getCustomer((String) customerCB.getValue());
IDTF.setText(String.valueOf(cus.getId() + ""));
firstNameTF.setText(cus.getFirstName());
lastNameTF.setText(cus.getLastName());
addressTF.setText(cus.getAddress());
cityTF.setText(cus.getCity());
stateTF.setText(cus.getCity());
zipTF.setText(cus.getZip());
phoneTF.setText(cus.getPhone());
emailTF.setText(cus.getEmail());
});
/* ------------------------------------- ///Ideas??
if (customerCB.getValue().equals(customerCB.getValue())) {
customerCB.getSelectionModel().getSelectedItems();
ObservableList<OrderDetail> orderDetails;
for (orderDetailTableView.setItems(orderDetails));
}else if{
customerCB_Changed()
customerCB.setOnAction (e -> customerCB_Changed() );
customerCB.setOnAction(e −> setDisplay(items.indexOf(customerCB.getValue())));
customerCB.valueProperty().addListener(new ChangeListener<Customer>) {
@Override
void changed(ObservableValue<? extends Customer>
observable,Customer oldValue,Customer newValue);
};
ObservableList<OrderDetail> orderDetails = FXCollections.observableArrayList(getOrderDetails());
}
// VBox vboxOrderDetail = prepareOrderDetailReport();
-------------------------------------- */
// Create a TableView
TableView orderDetailTableView = new TableView();
orderDetailTableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
orderDetailTableView.setPrefHeight(130);
ObservableList<OrderDetail> orderDetails;
// Create the columns of the "Order Detail Report"
TableColumn<OrderDetail,Integer> orderIdCol = new TableColumn<>("Order ID");
orderIdCol.setCellValueFactory(new PropertyValueFactory<>("id"));
orderIdCol.setStyle("-fx-alignment: CENTER;");
TableColumn<Customer,String> orderDateCol = new TableColumn<>("Order Date");
orderDateCol.setCellValueFactory(new PropertyValueFactory<>("orderDate"));
TableColumn<Customer,String> statusCol = new TableColumn<>("Status");
statusCol.setCellValueFactory(new PropertyValueFactory<>("status"));
TableColumn<Customer,Integer> customerIdCol = new TableColumn<>("Customer ID");
customerIdCol.setCellValueFactory(new PropertyValueFactory<>("customerId"));
customerIdCol.setStyle("-fx-alignment: CENTER;");
TableColumn<Customer,String> firstNameCol = new TableColumn<>("First Name");
firstNameCol.setCellValueFactory(new PropertyValueFactory<>("firstName"));
TableColumn<Customer,String> lastNameCol = new TableColumn<>("Last Name");
lastNameCol.setCellValueFactory(new PropertyValueFactory<>("lastName"));
TableColumn<Customer,String> addressCol = new TableColumn<>("Address");
addressCol.setCellValueFactory(new PropertyValueFactory<>("address"));
TableColumn<Customer,String> cityCol = new TableColumn<>("City");
cityCol.setCellValueFactory(new PropertyValueFactory<>("city"));
TableColumn<Customer,String> stateCol = new TableColumn<>("State");
stateCol.setCellValueFactory(new PropertyValueFactory<>("state"));
TableColumn<Customer,String> zipCol = new TableColumn<>("Zip");
zipCol.setCellValueFactory(new PropertyValueFactory<>("zip"));
zipCol.setStyle("-fx-alignment: CENTER;");
TableColumn<Customer,String> phoneCol = new TableColumn<>("Phone");
phoneCol.setCellValueFactory(new PropertyValueFactory<>("phone"));
TableColumn<Customer,String> emailCol = new TableColumn<>("Email");
emailCol.setCellValueFactory(new PropertyValueFactory<>("email"));
TableColumn<Customer,String> productCol = new TableColumn<>("Product");
productCol.setCellValueFactory(new PropertyValueFactory<>("product"));
TableColumn<Customer,Integer> quantityCol = new TableColumn<>("Quantity");
quantityCol.setCellValueFactory(new PropertyValueFactory<>("quantity"));
quantityCol.setStyle("-fx-alignment: CENTER;");
orderDetailTableView.getColumns().addAll(orderIdCol,orderDateCol,statusCol,customerIdCol,firstNameCol,lastNameCol,addressCol,cityCol,stateCol,zipCol,phoneCol,emailCol,productCol,quantityCol);
orderDetails = FXCollections.observableArrayList(getOrderDetails());
orderDetailTableView.setItems(orderDetails);
VBox vBoxOR = new VBox();
vBoxOR.setSpacing(10);
vBoxOR.getChildren().addAll(titleLBL,customerCB,orderDetailTableView);
vBoxOR.setPadding(new Insets(10));
VBox vboxOL = new VBox(10);
vboxOL.getChildren().addAll(addMenu(primaryStage),vBoxOR);
ciScene = new Scene(vboxOL,1200,800);
} // end createCustomerInfoReportScene()
DB for MySql (script)
// Create a list of all details for a single customer's orders
public ObservableList<OrderDetail> getOrderDetails() {
initializeDB();
ObservableList<OrderDetail> orderDetails = FXCollections.observableArrayList();
try {
// SQL query to get the details of all orders for a single customer
String sql = "SELECT o.id order_id,o.order_date,o.order_status,c.id customer_id,c.first_name,\n"
+ " c.last_name,c.address,c.city,c.state,c.zip,c.phone,c.email,p.product_name product,od.quantity \n"
+ " FROM `order` o \n"
+ " INNER JOIN order_detail od ON o.id = od.order_id\n"
+ " INNER JOIN customer c ON o.customer_id = c.id\n"
+ " INNER JOIN product p ON od.product_id = p.id";
stmt = connection.createStatement();
// Execute the query and retrieve the results
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
// Create an object of the class OrderDetails
OrderDetail orderDetail = new OrderDetail();
orderDetail.setId(rs.getInt("order_id"));
orderDetail.setOrderDate(rs.getDate("order_date"));
orderDetail.setStatus(rs.getString("order_status"));
orderDetail.setCustomerId(rs.getInt("customer_id"));
orderDetail.setFirstName(rs.getString("first_name"));
orderDetail.setLastName(rs.getString("last_name"));
orderDetail.setAddress(rs.getString("address"));
orderDetail.setCity(rs.getString("city"));
orderDetail.setState(rs.getString("state"));
orderDetail.setZip(rs.getString("zip"));
orderDetail.setPhone(rs.getString("phone"));
orderDetail.setEmail(rs.getString("email"));
orderDetail.setProduct(rs.getString("product"));
orderDetail.setQuantity(rs.getInt("quantity"));
// Add the details of an order to the "orderDetails" list
orderDetails.add(orderDetail);
}
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
closeStmt();
}
closeDB();
return orderDetails;
} // end getOrderDetailList()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。