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

JavaFX实现点击单选按钮时显示公司列表的方法

实现JavaFX单选按钮触发公司列表显示的功能

没问题,我来帮你搞定这个需求!核心思路是给单选按钮所在的ToggleGroup添加状态监听,当任意一个单选按钮被选中时显示公司列表,没有选中项时就隐藏它。下面是基于你给出的代码完善后的完整实现:

完整代码示例

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class CompaniesChoice extends Application {
    private BorderPane borderOnce;
    private HBox hb;
    private final ToggleGroup group;
    private Text companiesLabel;
    private Button goOn;
    private RadioButton btnDefault;
    private RadioButton btnPersonalized;
    private GridPane secondaryPane;
    // 新增公司列表组件
    private ListView<String> companyListView;

    public CompaniesChoice() {
        borderOnce = new BorderPane();
        secondaryPane = new GridPane();
        group = new ToggleGroup();
        
        // 初始化单选按钮
        btnDefault = new RadioButton("默认选择");
        btnDefault.setToggleGroup(group);
        btnPersonalized = new RadioButton("自定义选择");
        btnPersonalized.setToggleGroup(group);
        
        // 初始化公司列表和标签
        companiesLabel = new Text("可选公司:");
        companyListView = new ListView<>();
        // 先把列表设为隐藏,初始不显示
        companyListView.setVisible(false);
        companyListView.setManaged(false);
        companiesLabel.setVisible(false);
        companiesLabel.setManaged(false);
        
        // 添加测试数据
        companyListView.getItems().addAll("科技有限公司", "贸易有限公司", "制造有限公司");
        
        // 初始化其他组件
        goOn = new Button("继续");
        hb = new HBox(10, btnDefault, btnPersonalized); // 水平布局放单选按钮
        
        // 把组件添加到GridPane
        secondaryPane.add(hb, 0, 0);
        secondaryPane.add(companiesLabel, 0, 1);
        secondaryPane.add(companyListView, 0, 2);
        secondaryPane.add(goOn, 0, 3);
        secondaryPane.setVgap(10); // 设置垂直间距
        
        // 核心:监听ToggleGroup的选中状态变化
        group.selectedToggleProperty().addListener((obs, oldToggle, newToggle) -> {
            boolean isSelected = newToggle != null;
            // 显示/隐藏公司列表和标签
            companyListView.setVisible(isSelected);
            companyListView.setManaged(isSelected);
            companiesLabel.setVisible(isSelected);
            companiesLabel.setManaged(isSelected);
        });
        
        borderOnce.setCenter(secondaryPane);
    }

    @Override
    public void start(Stage primaryStage) {
        Scene scene = new Scene(borderOnce, 400, 300);
        primaryStage.setTitle("公司选择");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

关键部分解释

  • ToggleGroup监听:不用单独给每个单选按钮加监听器,直接监听整个ToggleGroup的selectedToggleProperty,这样不管哪个单选按钮被选中,都会触发回调。
  • 显示/隐藏控制:同时设置setVisible(false)和setManaged(false),前者负责隐藏组件,后者负责让布局管理器忽略这个组件,避免留下空白空间。
  • 初始状态:初始化时把公司列表和标签设为隐藏,只有当用户选中任意一个单选按钮时才会显示。

你可以根据自己的需求调整公司列表的组件(比如换成ComboBox或者TableView),也可以修改布局方式,核心的监听逻辑是通用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:21:47