You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现JavaFX产品表选中手表时更新Selected Watch标签?

问题描述

产品表格界面

当用户从产品表格中选中一款手表时,需根据选中手表的名称更新Selected Watch标签。请问如何实现该功能?

现有表格初始化代码如下:

public void setTable() {
    TableColumn<Product, Integer> watchIdColumn = new TableColumn<Product, Integer>("Watch ID"); 
    TableColumn<Product, String> watchNameColumn = new TableColumn<Product, String>("Watch Name"); 
    TableColumn<Product, String> watchBrandColumn = new TableColumn<Product, String>("Watch Brand"); 
    TableColumn<Product, String> watchPriceColumn = new TableColumn<Product, String>("Watch Price");
    TableColumn<Product, Integer> watchStockColumn = new TableColumn<Product, Integer>("Watch Stock");
        
    watchIdColumn.setCellValueFactory(new PropertyValueFactory<Product, Integer>("watchID"));
    watchNameColumn.setCellValueFactory(new PropertyValueFactory<Product, String>("watchName"));
    watchBrandColumn.setCellValueFactory(new PropertyValueFactory<Product, String>("watchBrand"));
    watchPriceColumn.setCellValueFactory(new PropertyValueFactory<Product, String>("watchPrice"));
    watchStockColumn.setCellValueFactory(new PropertyValueFactory<Product, Integer>("watchStock"));

    tableProduct.getColumns().addAll(watchIdColumn, watchNameColumn, watchBrandColumn, watchPriceColumn, watchStockColumn);
    tableProduct.getItems().add(new Product(1,"Submariner 300 Watch","Rolex", "$10500", 4));
    tableProduct.getItems().add(new Product(2,"Sea Master Planet Ocean Watch","Omega", "$6900", 5));
}
实现方案

在JavaFX中,通过监听表格选中项的变化即可实现该功能,具体步骤如下:

  • 获取表格的选中模型:调用tableProduct.getSelectionModel()获取默认的单选中模型
  • 添加选中项变化监听器:监听选中项的属性变化,触发更新逻辑
  • 更新标签内容:在监听器内提取选中产品的手表名称,设置到目标标签上

示例代码如下:

// 假设已初始化名为selectedWatchLabel的Label组件
Label selectedWatchLabel = new Label("Selected Watch:");

// 监听表格选中项变化
tableProduct.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
    if (newValue != null) {
        // 选中产品时,更新标签显示手表名称
        selectedWatchLabel.setText("Selected Watch: " + newValue.getWatchName());
    } else {
        // 无选中项时重置标签文本
        selectedWatchLabel.setText("Selected Watch:");
    }
});

注意事项

  • 确保Product类中存在getWatchName()方法,PropertyValueFactory及监听器都依赖该方法获取数据
  • 若需支持多选,可改用getSelectedItems()获取所有选中项,但当前需求单选中模式更适配

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:55:30