首页 > 其他分享 >如何使用ChoiceBox以接收用户的单项选择

如何使用ChoiceBox以接收用户的单项选择

时间:2023-05-27 16:44:41浏览次数:41  
标签:CityItem countryChoiceBox 单项 name public new 接收 ChoiceBox

如何使用ChoiceBox以接收用户的单项选择

ChoiceBox 是一种下拉框,点击后显示可选列表,从中可以再点击选择一个选项。

ChoiceBox 可以用于接收用户的单项选择。

效果展示

image

image

示例代码

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ChoiceBoxExample extends Application
{
    static class CityItem
    {
        private int id;
        private String name;

        public CityItem(int id, String name)
        {
            this.id = id;
            this.name = name;
        }

        public int getId() { return id; }
        public String getName() { return name; }
        public String toString() { return name; }
    }

    private ChoiceBox<CityItem> countryChoiceBox;

    private void getChoice()
    {
        CityItem cityItem = countryChoiceBox.getValue();
        if (cityItem == null)
        {
            System.out.println("You haven't make a choice yet");
        }
        else
        {
            System.out.println(String.format("id: %d, name: %s", cityItem.getId(), cityItem.getName()));
        }
    }

    @Override
    public void start(Stage window) throws Exception
    {
        VBox vBox = new VBox();
        vBox.setPadding(new Insets(10));
        vBox.setSpacing(10);

        countryChoiceBox = new ChoiceBox<>();
        countryChoiceBox.getItems().add(new CityItem(1, "Beijing"));
        countryChoiceBox.getItems().add(new CityItem(2, "Shanghai"));
        countryChoiceBox.getItems().add(new CityItem(3, "Guangzhou"));

        Button button = new Button("Make Choice");
        button.setOnAction( e -> getChoice() );

        vBox.getChildren().addAll(countryChoiceBox, button);

        Scene scene = new Scene(vBox, 400, 300);

        window.setScene(scene);
        window.setTitle(this.getClass().getSimpleName());
        window.show();
    }

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

代码说明

  • private ChoiceBox<CityItem> countryChoiceBox; 定义了一个 ChoiceBox ,每个条目存放的是自定义类型 CityItem
  • CityItem 重写了 toString 方法,ChoiceBox 的条目显示的是其返回的字符串
  • countryChoiceBox.getValue 返回一个 CityItem ,当未做出选择时它将返回 null

如何监听用户选择事件

有时我们希望在用户选择后立刻做出响应,而非点击按钮才从 ChoiceBox 中获取当前选项。

我们可以通过调用 setOnAction 方法来设置一个回调函数,以达到这个目的:

countryChoiceBox.setOnAction( e-> getChoice() );

总结

ChoiceBox提供了一种简单而直观的方式来接收用户的单项选择。

可以提供一个自定义类型(重写了 toString 方法)作为 ChoiceBox 的 Item 。

可以通过 getValue 方法获取 ChoiceBox 中当前选择的 Item 。

标签:CityItem,countryChoiceBox,单项,name,public,new,接收,ChoiceBox
From: https://www.cnblogs.com/javafx-howto/p/17436954.html

相关文章

  • 基于MIMO-OFDM通信系统的误码率matlab仿真,对比了MRC,ZF等多种接收器性能
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要    MIMO-OFDM系统的接收信号是多个发射天线发送信号的衰落与加性噪声的线性叠加,若采用通常SISO-OFDM系统或MIMO系统的估计算法估计信道,将会带来很大的估计误差。出于设计实现的考虑,本文主要研究理论相......
  • 基于MIMO-OFDM通信系统的误码率matlab仿真,对比了MRC,ZF等多种接收器性能
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要MIMO-OFDM系统的接收信号是多个发射天线发送信号的衰落与加性噪声的线性叠加,若采用通常SISO-OFDM系统或MIMO系统的估计算法估计信道,将会带来很大的估计误差。出于设计实现的考虑,本文主要研究理论相对比较成熟的慢......
  • EBS实践—PO内部申请自动接收入库
    declareCURSORcur_req_dataISSELECTprl.*FROMpo_requisition_lines_allprl,po_requisition_headers_allprhWHEREprh.requisition_header_id=prl.requisition_header_idANDprl.requisition_line_id=p_requ......
  • 接收请求参数与 Restful【SpringMVC】
    一、接收请求参数@RequestParm1、起别名2、问号传值3、完成映射(集合)@PathVariable斜杠 路径传值@RequestBodyjson参数传值 二、时间日期参数@DateTimeFormat(pattern="yyyy-MM-ddHH:mm:ss")设置日期格式 三、Restful@PostMapping......
  • 基于Matlab模拟毫米波雷达接收发射信号仿真
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 如何接收用户事件_以Button点击为例
    如何接收用户事件_以Button点击为例JavaFX中与用户进行交互的方式可以通过事件的回调。我们可以给一个控件(比如Button)绑定一个事件回调函数,当相关事件触发时(比如Button被点击),JavaFX将调用这个回调函数。以Button为例,在我们创建好Button后,调用setOnAction方法为其设......
  • LiveNVR视频平台接收无人机等移动终端RTMP推流后转成GB28181协议输出级联到GB28181视
    1、需求介绍目前很多移动终端设备(如无人机等)只支持RTMP推流输出,不支持GB28181协议。但是又有需要通过GB28181协议接入到视频平台的需求。比如有些大疆无人机产品不能直接注册国标平台,只能rtmp推流。那么,项目中如果将无人机的rtmp的推流转成GB/T281812、获取RTMP推流地址2.1、RT......
  • SpringBoot实现WebSocket发送接收消息 + Vue实现SocketJs接收发送消息
    SpringBoot实现WebSocket发送接收消息+Vue实现SocketJs接收发送消息参考:1、https://www.mchweb.net/index.php/dev/887.html2、https://itonline.blog.csdn.net/article/details/81221103?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2......
  • 直播平台制作,支持其他应用打开,接收其他应用文件并保存
    直播平台制作,支持其他应用打开,接收其他应用文件并保存AndroidMainfest中      <activity      android:name=".ui.activity.OtherFileActivity"      android:screenOrientation="portrait">      <intent-filter>    ......
  • activemq发送和接收对象
    1、网上的例子都是直接发送文本消息的,我做了一个简单的变换,就是能够发送和接收对象。首先,在这里确认一下版本,activemq版本是apache-activemq-5.4.1-bin.zip,activemq安装环境是win7,jdk是1.6版本。下载apache-activemq-5.4.1-bin.zip,到官网http://activemq.apache.org/download.html......