首页 > 其他分享 >如何使用ComboBox以获取用户的单选并可编辑

如何使用ComboBox以获取用户的单选并可编辑

时间:2023-05-30 17:11:25浏览次数:45  
标签:String ComboBox countryComboBox 获取 单选 import new name

如何使用ComboBox以获取用户的单选并可编辑

ComboBox 是一种单选下拉框,和 ChoiceBox 很类似。

ComboBox 不仅可以接收用户的一个选项,还可以提供可编辑框,让用户输入内容。

效果展示

image

image

示例代码

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

public class ComboBoxExample 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 ComboBox<CityItem> countryComboBox;

    private void getChoice()
    {
        String text = countryComboBox.getEditor().getText();
        for (CityItem cityItem : countryComboBox.getItems())
        {
            if (cityItem.getName().equals(text))
            {
                System.out.println(String.format("id: %d, name: %s", cityItem.getId(), cityItem.getName()));
                return;
            }
        }

        System.out.println("no such city: " + text);
    }

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

        countryComboBox = new ComboBox<>();
        countryComboBox.getItems().add(new CityItem(1, "Beijing"));
        countryComboBox.getItems().add(new CityItem(2, "Shanghai"));
        countryComboBox.getItems().add(new CityItem(3, "Guangzhou"));
        countryComboBox.setEditable(true);

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

        vBox.getChildren().addAll(countryComboBox, 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);
    }
}

代码说明

这段代码基本上和 ChoiceBox 的示例一样。

不同点在于:

  • 调用 countryComboBox.setEditable(true); 将 ComboBox 设置成可编辑,从而用户可以输入、拷贝内容
  • 修改获取选项的方法,改用 String text = countryComboBox.getEditor().getText(); 获取内容,这是因为如果使用 comboBox.getValue() 将无法得到正确的类型从而引发异常
  • 获取当前 comboBox 的内容后,我们通过 for 循环查询匹配的选项,完成 comboBox.getValue() 的功能

总结

ComboBox 和 ChoiceBox 类似,都提供了下拉框功能,并接收用户的一个单选选项。

ComboBox 比之 ChoiceBox ,可以提供可编辑的功能,调用 comboBox.setEditable(true); 即可实现。

但由于启动了可编辑,我们不能再使用 comboBox.getValue() 方法获取自定义的类型,因为此时可能导致类型转化错误。

替代方案是使用 comboBox.getEditor().getText(); 来获取当前选项的文本,再通过匹配查找得到对应的选项。

标签:String,ComboBox,countryComboBox,获取,单选,import,new,name
From: https://www.cnblogs.com/javafx-howto/p/17443752.html

相关文章

  • 对wifi密码进行获取
    简单的密码,还可以,复杂的密码基本没戏,代码是从别的地方复制过来的。#coding:utf-8fromtkinterimport*fromtkinterimportttkimportpywififrompywifiimportconstimporttimeimporttkinter.filedialogimporttkinter.messageboxclassWiFiCracker:def__i......
  • uiautomator2获取UIObject元素的属性info用法
    info是UIAutomator2中用来获取控件属性信息的方法。该方法可以获取到指定元素的一些属性信息,例如控件的文本、坐标、大小、类名、包名、是否可见等。使用该方法可以帮助我们更好的理解应用程序的UI结构,并找到需要操作的控件元素。d(text=element,instance=index).infoinfo是U......
  • js 获取 image 原始高度
    新版浏览器//这个api仅支持新版本浏览器,旧版还是得创建一个内部图片setTimeout(()=>{letimgRef=this.$refs.imgthis.imgWidth=imgRef.naturalWidththis.imgHeight=imgRef.naturalHeight},10)旧版浏览器(兼容)fu......
  • 获取并改变display的值
    1.获取display的值//jquery.css("display")//js.style.display; 2.更改display的值//jquery方式.css("display","none");//js方式.style.display="none"; 转自https://blog.csdn.net/qq_41121204/article/details/92995933......
  • 通过SQL获取每个月第n周任意天的数据
    1.场景描述MySQL数据库中有日期字段,通过SQL查询每个月第n周的周内任意一天的数据。2.实现SQL通过SQL查询每个月第二周的周一的数据SELECT*FROMtransactionsWHEREDAYOFWEEK(`create_time`)=2ANDWEEK(`create_time`,3)=WEEK(DATE_SUB(`create_ti......
  • 根据ProcessId获取进程的窗口句柄
    functionTForm1.GetHWndByPID(consthPID:THandle):THandle;typePEnumInfo=^TEnumInfo;TEnumInfo=recordProcessID:DWORD;HWND:THandle;end;functionEnumWindowsProc(Wnd:DWORD;varEI:TEnumInfo):Bool;stdcall;var......
  • 2023-05-30 前端通过node获取七牛云的token(token最好还是在后端返回,前端获取token会暴
    constfs=require('fs');constqiniu=require('qiniu');varaccessKey='你的accessKey';varsecretKey='你的secretKey';varmac=newqiniu.auth.digest.Mac(accessKey,secretKey);//获取七牛tokenvaroptions={......
  • php获取目录权限
    要获取PHP目录权限,可以使用fileperms()函数来检索文件或目录的访问权限。以下是一个简单的示例代码:$directory='/path/to/directory';$permissions=fileperms($directory);echosubstr(sprintf('%o',$permissions),-4);这将输出一个4位的八进制数字,表示目录的权限。例......
  • Mysql Php 推送获取随机数据解决分页重复问题
    或许你已经看过很多博主写的文章,要不就是抄袭,要不就是给你一个下面的语句,随机是随机了,但是多来两页,你会发现前面出现的数据在第三页甚至第二页就出现了select*fromtableorderbyrand()这是因为rand()机制的问题,他每次都会打乱数据给你,然后你去取的时候0-10,11-20都有可能......
  • “编不下去了!”~如何在泛型方法里获取T的类型?
    我定义了一个hessian2反序列化的工具方法。为了便于使用,使用了泛型。可是遇到了一个问题,其中调用的Hessian2Input#readObject的入参类型是Class实例。那么,怎么获取泛型T的类型呢?publicstatic<T>Tdeserialize(byte[]bytes)throwsIOException{try(ByteArrayInputStr......