JavaFX 下拉框

news2024/11/26 4:50:10

组合框允许用户选择几个选项之一。用户可以滚动到下拉列表。组合框可以是可编辑和不可编辑的。

创建组合框

以下代码将选项列表包装到ObservableList中,然后使用observable列表实例化ComboBox类。

ObservableList<String> options = 
    FXCollections.observableArrayList(
    "1",
    "2",
    "3"
);
ComboBox comboBox = new ComboBox(options);

我们还可以使用空构造函数创建一个组合框,并调用其setItems方法设置数据。

ComboBox comboBox = new ComboBox(options);
comboBox.setItems(options);

向具有新值的项目的组合框中添加更多项目。

comboBox.getItems().addAll(
    "4",
    "5",
    "6"
);

setValue 方法设置在组合框中选择的项目。在调用setValue方法时,即使值不在组合框项目列表中,selectionModel属性的选定项也会更改为此值。

getValue方法返回所选的值。

要限制下拉列表中可见行的数量,请使用以下代码。

comboBox.setVisibleRowCount(3) 

可编辑的组合框

setEditable(true)方法使组合框可编辑。使用setPromptText方法,当不执行选择时,我们可以指定显示在组合框编辑区域中的文本。

ComboBox myComboBox = new ComboBox();
myComboBox.getItems().addAll(
    "s@example.com",
    "i@example.com",
    "e@example.com",
    "m@example.com"  
);
myComboBox.setPromptText("Email address");
myComboBox.setEditable(true);        
myComboBox.setOnAction((Event ev) -> {
    address =  myComboBox.getSelectionModel().getSelectedItem().toString();    
});
myComboBox.setValue("s@example.com"); 

以下代码创建一个简单的可编辑组合框

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group(), 450, 250);
        
        ComboBox<String> myComboBox = new ComboBox<String>();
        myComboBox.getItems().addAll("A","B","C","D","E");
        myComboBox.setEditable(true);        
        
        Group root = (Group) scene.getRoot();
        root.getChildren().add(myComboBox);
        stage.setScene(scene);
        stage.show();
        
    }
}

组合框单元格

我们可以使用单元格工厂来改变组合框的默认行为或外观。

以下代码创建一个单元格工厂,并将其应用到组合框。

单元格工厂生成ListCell对象。 每个单元格与一个组合框项目相关联。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Callback;

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group(), 200, 200);
        ComboBox<String> myComboBox = new ComboBox<String>();
        myComboBox.getItems().addAll("A", "B", "C", "D", "E");
        myComboBox
            .setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
                @Override
                public ListCell<String> call(ListView<String> param) {
                    final ListCell<String> cell = new ListCell<String>() {
                        {
                            super.setPrefWidth(100);
                        }
                        
                        @Override
                        public void updateItem(String item, boolean empty) {
                            super.updateItem(item, empty);
                            if (item != null) {
                                setText(item);
                                if (item.contains("A")) {
                                    setTextFill(Color.RED);
                                } else if (item.contains("B")) {
                                    setTextFill(Color.GREEN);
                                } else {
                                    setTextFill(Color.BLACK);
                                }
                            } else {
                                setText(null);
                            }
                        }
                    };
                    return cell;
                }
            });
        Group root = (Group) scene.getRoot();
        root.getChildren().add(myComboBox);
        stage.setScene(scene);
        stage.show();
    }
}

例1

将值设置为null以清除ComboBox

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group(), 450, 250);
        ComboBox<String> myComboBox = new ComboBox<String>();
        myComboBox.getItems().addAll("A","B","C","D","E");
        myComboBox.setValue("A");
        System.out.println(myComboBox.getValue());
        
        myComboBox.setValue(null);
        
        Group root = (Group) scene.getRoot();
        root.getChildren().add(myComboBox);
        stage.setScene(scene);
        stage.show();
    }
}

例2

设置和获取ComboBox的值

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group(), 450, 250);
        ComboBox<String> myComboBox = new ComboBox<String>();
        myComboBox.getItems().addAll("A","B","C","D","E");
        myComboBox.setValue("A");
        System.out.println(myComboBox.getValue());
        
        
        Group root = (Group) scene.getRoot();
        root.getChildren().add(myComboBox);
        stage.setScene(scene);
        stage.show();
    }
}

例3

将更改监听器添加到ComboBox valueProperty

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group(), 450, 250);
        ComboBox<String> myComboBox = new ComboBox<String>();
        myComboBox.getItems().addAll("A","B","C","D","E");
        myComboBox.setValue("A");
        System.out.println(myComboBox.getValue());
        myComboBox.valueProperty().addListener(new ChangeListener<String>() {
            @Override public void changed(ObservableValue ov, String t, String t1) {
                System.out.println(ov);
                System.out.println(t);
                System.out.println(t1);
            }    
        });
        
        Group root = (Group) scene.getRoot();
        root.getChildren().add(myComboBox);
        stage.setScene(scene);
        stage.show();
    }
}

例4

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group(), 450, 250);
        ComboBox<String> myComboBox = new ComboBox<String>();
        myComboBox.getItems().addAll("A","B","C","D","E");
        myComboBox.setEditable(true);
        myComboBox.setPromptText("Email address");
        
        Group root = (Group) scene.getRoot();
        root.getChildren().add(myComboBox);
        stage.setScene(scene);
        stage.show();
    }
}

例5

在ComboBox中显示矩形

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }
    @Override
    public void start(final Stage primaryStage) {
        Group root = new Group();
        Scene scene = new Scene(root, 400, 300, Color.WHITE);
        
        GridPane gridpane = new GridPane();
        
        ComboBox<Rectangle> cmb = new ComboBox<Rectangle>();
        cmb.getItems().addAll(
            new Rectangle(10, 10, Color.RED), 
            new Rectangle(10, 10, Color.GREEN), 
            new Rectangle(10, 10, Color.BLUE));
        
        gridpane.add(cmb, 2, 0);
        
        root.getChildren().add(gridpane);   
        primaryStage.setScene(scene);
        
        primaryStage.show();
    }
    
}

例6

以下代码显示了如何使用CellFactory显示组合框值。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Callback;

public class Main extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }
    
    @Override
    public void start(final Stage primaryStage) {
        Group root = new Group();
        Scene scene = new Scene(root, 400, 300, Color.WHITE);
        GridPane gridpane = new GridPane();
        ComboBox<Color> cmb = new ComboBox<Color>();
        cmb.getItems().addAll(Color.RED, Color.GREEN, Color.BLUE);
        cmb.setCellFactory(new Callback<ListView<Color>, ListCell<Color>>() {
            @Override
            public ListCell<Color> call(ListView<Color> p) {
                return new ListCell<Color>() {
                    private final Rectangle rectangle;
                    {
                        setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                        rectangle = new Rectangle(10, 10);
                    }
                    
                    @Override
                    protected void updateItem(Color item, boolean empty) {
                        super.updateItem(item, empty);
                        
                        if (item == null || empty) {
                            setGraphic(null);
                        } else {
                            rectangle.setFill(item);
                            setGraphic(rectangle);
                        }
                    }
                };
            }
        });
        
        gridpane.add(cmb, 2, 0);
        
        root.getChildren().add(gridpane);
        primaryStage.setScene(scene);
        
        primaryStage.show();
    }
    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

区块链媒体发布推广秘籍大揭秘-华媒舍

区块链技术迅猛发展&#xff0c;成为全球瞩目的热门领域。随之而来的是区块链媒体的兴起&#xff0c;成为传播和推广区块链知识、项目和应用的重要平台。本文将揭示区块链媒体发布推广的秘籍&#xff0c;为读者深入了解该领域提供详尽科普介绍。 一、什么是区块链媒体&#xff…

Docker:安装RediSearch全文搜索

1、简述 在本文中&#xff0c;我们将介绍如何使用Docker快速、简便地安装RediSearch&#xff0c;Redis的全文搜索模块。RediSearch提供了高效的全文搜索功能&#xff0c;通过Docker安装&#xff0c;可以轻松地在任何环境中部署和管理RediSearch。 官网地址&#xff1a;https:/…

18.cobra框架了解

目录 概述举例安装实践实践 概述 github cobra cobra 快速的实现一个命令行客户端&#xff0c;命令行解析工具。 cobra 中的主要概念 -Commands 表示执行运作-Args 执行参数-Flags 这些运作的标识符 举例 git clone 命令 git clone https://github.com/spf13/cobra.git -…

白嫖游戏指南,Epic喜加二:《Freshly Frosted》《Rumble Club》

前言 Epic喜加二&#xff1a;《Freshly Frosted》《Rumble Club》《Freshly Frosted》简介&#xff1a; 《Rumble Club》简介&#xff1a; 前言 接下来有时间会分享一些游戏相关可以白嫖的资源&#xff0c;包括游戏本体、游戏素材资源等等。 有需要的小伙伴可以关注这个专栏&…

文件批量改名利器:一键实现文件名中字母统一转为大写,让文件管理更高效有序!

在日常工作和生活中&#xff0c;我们经常会遇到需要批量重命名文件的情况。尤其是当文件名中包含字母时&#xff0c;如果希望将所有字母统一更改为大写&#xff0c;传统的逐个修改方式无疑会耗费大量时间。不过&#xff0c;有了高效的文件批量改名工具&#xff0c;这一难题将迎…

【C++】平衡二叉树(AVL树)的实现

目录 一、AVL树的概念二、AVL树的实现1、AVL树的定义2. 平衡二叉树的插入2.1 按照二叉排序树的方式插入并更新平衡因子2.2 AVL树的旋转2.2.1 新节点插入较高左子树的左侧&#xff08;LL平衡旋转&#xff09;2.2.2 新节点插入较高右子树的右侧&#xff08;RR平衡旋转&#xff09…

【计算机毕业设计】204基于微信小程序疫情期间学生请假与销假系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

windows使用curl命令出现乱码的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

第3章 小功能大用处-发布订阅

Redis提供了基于“发布/订阅”模式的消息机制&#xff0c;此种模式下&#xff0c;消息发布者和订阅者不进行直接通信&#xff0c;发布者客户端向指定的频道&#xff08;channel&#xff09;发布消息&#xff0c;订阅该频道的每个客户端都可以收到该消息。 命令&#xff1a;Red…

【CPP】插入排序、希尔排序

目录 1.插入排序1.1直接插入排序简介代码分析 1.2直接插入对比冒泡排序简介代码对比分析(直接插入排序与冒泡的复杂度效率区别) 1.3希尔排序简介代码分析 1.插入排序 基本思想&#xff1a;把一个待排数字按照关键码值插入到一个有序序列中&#xff0c;得到一个新的有序序列。 …

高校新闻头条系统

摘 要 随着互联网技术的快速发展&#xff0c;网络几乎成为了人们搜集信息和交流沟通最方便、快捷的通道&#xff0c;科技创新一直在影响着人们的生活&#xff0c;人们的衣食住行也在不断变化&#xff0c;与此同时&#xff0c;也大大改变了人们获取信息的方式&#xff0c;人们获…

甘肃旅游服务平台的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;公告信息管理&#xff0c;景点管理&#xff0c;酒店管理&#xff0c;基础数据管理&#xff0c;美食管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0…

kafka第二篇——主题创建,主题分区副本分配策略

目录 主题创建 引入 回顾主题&#xff0c;分区&#xff0c;副本关系 代码 主题分区副本分配策略 底层逻辑分析 主题创建 引入 为啥才开始在idea上跑代码&#xff0c;topic都没创建出来&#xff0c;就直接跑出来了? 这是因为AutoTopicCreationManger参数可以自动创建主题…

首个AI高考全卷评测结果出分,大模型“考生”表现如何?

内容提要 大部分大模型“考生”语文、英语科目表现良好&#xff0c;但在数学方面还有待加强。阅卷老师点评&#xff0c;在语文科目上&#xff0c;对于语言中的一些“潜台词”&#xff0c;大模型尚无法完全理解。在数学科目上&#xff0c;大模型的主观题回答相对凌乱&#xff0…

关于运用人工智能帮助自己实现英语能力的有效提升?

# 实验报告 ## 实验目的 - 描述实验的目标&#xff1a;自己可以知道&#xff0c;自己的ai学习方法是否可以有效帮助自己实现自己的学习提升。 预期结果&#xff1a;在自己利用科技对于自己进行学习的过程中&#xff0c;自己的成长速度应该是一个幂指数的增长 ## 文献回顾 根据…

LabVIEW开发电机故障监测系统

开发了一套基于LabVIEW的智能电机故障监测系统&#xff0c;通过实时监测和分析电机运行参数&#xff0c;实现故障预测和诊断。系统集成了振动传感器、温度传感器、数据采集模块和分析模块&#xff0c;利用RS-485通信总线和Modbus协议确保数据的高精度实时传输&#xff0c;故障预…

Bootloader -- U-Boot 介绍

Bootloader -- U-Boot 介绍 1 介绍1.1 概述1.2 知名 BootloaderLILO (Linux Loader)GRUB (GNU GRand Unified Bootloader)LoadlinROLO (Rockbox Loader)EtherbootLinuxBIOS (现在叫 coreboot)BLOBU-BootRedBoot 1.3 BootLoader 和 Monitor 区别1.4 U-Boot 的源码结构1.5 U-Boot…

Keil MDK生成LIB库以及使用LIB库

一.keil下lib静态库的使用具有以下优点&#xff1a; 1.封装源代码&#xff0c;对外不开放&#xff0c;提高保密性。 2.将标准功能函数封装成库&#xff0c;提高代码的复用性。 3.使用库开发&#xff0c;简化开发流程&#xff0c;提高开发效率。 4.系统调用库函数&#xff0…

无人直播不封号美女舞团3.0 多重防非操作(教程+素材+工具)

在这个数字化的时代&#xff0c;直播已经成为了一种新的商业模式。然而&#xff0c;如何打造一个24小时自动循环播放的直播间&#xff0c;并通过此获得收益&#xff0c;却是许多人面临的挑战。本文将介绍如何通过使用OBS和咩播软件&#xff0c;创建一个能够吸引人们进入直播间并…

VMware vSphere Bitfusion 4.5.4 - 面向 AI 和 ML 应用提供弹性基础架构

VMware vSphere Bitfusion 4.5.4 - 面向 AI 和 ML 应用提供弹性基础架构 请访问原文链接&#xff1a;VMware vSphere Bitfusion 4.5.4 - 面向 AI 和 ML 应用提供弹性基础架构&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VM…