当前位置: 首页 > news >正文

swing快速入门(四十)JList、JComboBox实现列表框

注释很详细,直接上代码

上一篇

新增内容
🧧1.列表的属性设置与选项监听器
🧧2.下拉框的属性设置与选项监听器
🧧3.Box中组件填充情况不符合预期的处理方法
🧧4.LIst向Vector的转化方法

源码:

package swing31_40;import javax.swing.*;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.List;
import java.util.Vector;public class swing_test_38 {//定义一个JFrame对象JFrame jFrame = new JFrame("列表框测试");String[] books = {"java自学宝典","轻量级javaEE企业应用实战","Android基础教程","jQuery实战教程","SpringBoot企业级开发"};//用一个字符串数组来创建一个JList对象JList<String> bookList = new JList<>(books);//定义 选择列表项的下拉框JComboBox<String> bookSelector;//定义 布局选择按钮 所在的面板JPanel layoutPanel = new JPanel();//定义 布局选择按钮 所在的按钮组//这里既然可以直接添加,为什么要按钮组呢?//此处的按钮组是用于集合按钮获取其中的数量从而进行单个按钮的初始化选中ButtonGroup layoutGroup = new ButtonGroup();//定义 选择模式按钮 所在面板JPanel selectModePanel = new JPanel();//定义 选择模式按钮 所在的按钮组ButtonGroup selectModeGroup = new ButtonGroup();//定义 喜欢的书籍的文本域JTextArea favorite = new JTextArea(4,40);public void init(){//设置JList的可视高度可以同时展示3个列表项bookList.setVisibleRowCount(3);//设置Jlist默认选中第二和第三项bookList.setSelectionInterval(1,2);//添加布局选择按钮addLayoutButton("纵向滚动",JList.VERTICAL);addLayoutButton("纵向换行",JList.VERTICAL_WRAP);addLayoutButton("横向换行",JList.HORIZONTAL_WRAP);//添加选择模式按钮addSelectModeButton("无限制", ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);addSelectModeButton("单选", ListSelectionModel.SINGLE_SELECTION);addSelectModeButton("单范围", ListSelectionModel.SINGLE_INTERVAL_SELECTION);//将JList和布局选择按钮放置到box中Box listBox = Box.createVerticalBox();//将JList组件放置到JScrollPane中,并将JScrollPane放置到box中//原因:使界面样式达到平衡listBox.add(new JScrollPane(bookList));//将布局选择按钮放置到box中listBox.add(layoutPanel);//将选择模式按钮放置到box中listBox.add(selectModePanel);//为JList添加事件监听器bookList.addListSelectionListener(new ListSelectionListener() {@Overridepublic void valueChanged(ListSelectionEvent e) {//当JList的列表项发生变化时,执行此方法//获取JList的列表项List<String> selectedValuesList = bookList.getSelectedValuesList();//清空文本域favorite.setText("");//将JList的列表项添加到文本域中for (String s : selectedValuesList) {//将JList的列表项添加到文本域中favorite.append(s+"\n");}}});//定义一个Vector对象Vector<String> bookCollection = new Vector<>();//将List集合转换为Vector集合List<String> books = List.of("java自学宝典","轻量级javaEE企业应用实战","Android基础教程","jQuery实战教程","SpringBoot企业级开发");bookCollection.addAll(books);//创建JComboBox对象bookSelector = new JComboBox<>(bookCollection);//为JComboBox添加事件监听器bookSelector.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent e) {//当JComboBox的列表项发生变化时,执行此方法//获取JComboBox的列表项Object selectedItem = bookSelector.getSelectedItem();//将JComboBox的列表项显示在文本域中favorite.setText(selectedItem.toString());}});//设置JComboBox的列表项可编辑bookSelector.setEditable(true);//设置下拉列表的可视高度最多显示4个列表项bookSelector.setMaximumRowCount(4);//为什么将bookSelector添加到面板中呢?//如果不这样下拉栏会默认填充所有位置JPanel panel = new JPanel();//定义一个JPanel面板panel.add(bookSelector);//将JComboBox添加到面板中Box box = Box.createHorizontalBox();//定义一个Box面板box.add(listBox);//将JList添加到Box面板中box.add(panel);//将JPanel添加到Box面板中JPanel favoritePanel = new JPanel();//定义一个JPanel面板favoritePanel.setLayout(new BorderLayout());//设置布局为BorderLayoutfavoritePanel.add(new JScrollPane(favorite));//将JTextArea添加到JScrollPane中favoritePanel.add(new JLabel("您最喜欢的图书:"),BorderLayout.NORTH);//将JLabel添加到JScrollPane的North位置jFrame.add(box);//将Box添加到JFrame中(默认居中)jFrame.add(favoritePanel,BorderLayout.SOUTH);//将JPanel添加到JFrame的South位置jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置JFrame的默认关闭操作jFrame.pack();//设置JFrame自适应大小jFrame.setVisible(true);//设置JFrame可见}//添加布局选择按钮public void addLayoutButton(String label,int orientation){//设置布局选择按钮的标题以及边框layoutPanel.setBorder(new TitledBorder(new EtchedBorder(),"确定选项布局"));//创建一个布局选择按钮JRadioButton button = new JRadioButton(label);//将布局选择按钮添加到按钮面板layoutPanel.add(button);//默认选中第一个按钮if (layoutGroup.getButtonCount()==0){button.setSelected(true);}//将布局选择按钮添加到按钮组layoutGroup.add(button);//为布局选择按钮添加事件监听器button.addActionListener(e->{//改变列表框里列表项的布局方向bookList.setLayoutOrientation(orientation);});}//添加选择模式按钮public void addSelectModeButton(String label,int selectMode){//设置选择模式按钮的标题以及边框selectModePanel.setBorder(new TitledBorder(new EtchedBorder(),"确定选择模式"));//创建一个布局选择按钮JRadioButton button = new JRadioButton(label);//将布局选择按钮添加到按钮面板selectModePanel.add(button);//默认选中第一个按钮if (selectModeGroup.getButtonCount()==0){button.setSelected(true);}//将布局选择按钮添加到按钮组selectModeGroup.add(button);//为布局选择按钮添加事件监听器button.addActionListener(e->{//改变列表框里列表项的选择模式bookList.setSelectionMode(selectMode);});}public static void main(String[] args) {//启动程序new swing_test_38().init();}
}

效果演示:

在这里插入图片描述
下一篇

相关文章:

swing快速入门(四十)JList、JComboBox实现列表框

注释很详细&#xff0c;直接上代码 上一篇 新增内容 &#x1f9e7;1.列表的属性设置与选项监听器 &#x1f9e7;2.下拉框的属性设置与选项监听器 &#x1f9e7;3.Box中组件填充情况不符合预期的处理方法 &#x1f9e7;4.LIst向Vector的转化方法 源码&#xff1a; package swing…...

React Native 原生组件回调JS层方法和 JS 层调用原生组件的事件方法

一、原生组件回调 JS 层提供的事件方法 比如 TextInput 组件 onChangeText 属性&#xff0c;输入事件是发生在原生层的但是需要通知 JS 层发生了变化&#xff0c;并执行 JS 层的方法。 1、给原生组件添加一个按钮用于触发原生事件方法 在 XML 中添加一个按钮 为了方便让 Inf…...

Go-安装与基础语法

TOC 1. Go 安装与环境变量 1.1 下载 需要从Go语言的官方网站下载适合你操作系统的Go语言安装包。Go语言支持多种操作系统&#xff0c;包括Windows、Linux和Mac OS。 对于Windows用户&#xff0c;下载.msi文件&#xff0c;然后双击该文件&#xff0c;按照提示进行安装即可。…...

【同济子豪兄斯坦福CS224W中文精讲】NetworkX代码学习笔记

文章目录 安装配置创建图可视化图图数据挖掘参考资料 安装配置 matplotlib中文字体设置 import networkx as nx import matplotlib.pyplot as plt # 魔法指令&#xff0c;设置后在jupyter notebook中绘制的图形会显示在输出单元格中&#xff0c;而不是弹出一个新窗口 %matplo…...

java+ssm+vue代码视频学习讲解

一、ssm 1.项目文件结构 2.数据库连接信息 3.其他配置信息 4.java代码文件目录介绍 5.entity层代码 6.controller&#xff0c;service&#xff0c;dao&#xff0c;entity层之间的关系 7.controller层代码 8.登陆拦截功能实现 AuthorizationInterceptor.java 9.文件上传功能 …...

[计算机提升] 创建FTP共享

4.7 创建FTP共享 4.7.1 FTP介绍 在Windows系统中&#xff0c;FTP共享是一种用于在网络上进行文件传输的标准协议。它可以让用户通过FTP客户端程序访问并下载或上传文件&#xff0c;实现文件共享。 FTP共享的用途非常广泛&#xff0c;例如可以让多个用户共享文件、进行文件备份…...

R语言将list转变为dataframe(常用)

在R语言使用中常常遇到list文件需要转变为dataframe格式文件处理。这是需要写循环来进行转换。IOBR查看其收录的相关基因集(自备)_iobr_deg-CSDN博客 示例文件 list文件&#xff1a; 循环转换为dataframe data <- signature_tme dat <- as.data.frame(t(sapply(data, …...

【JAVA】OPENGL+TIFF格式图片,不同阈值旋转效果

有些科学研究领域会用到一些TIFF格式图片&#xff0c;由于是多张图片相互渐变&#xff0c;看起来比较有意思&#xff1a; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*;/*** 可以自已定义日志打印格式…...

Linux系统中使用ln命令创建软连接

大家应该和我一样&#xff0c;第一次听到软连接这个词时感觉好高级啊&#xff0c;但其实也就那么回事&#xff0c;你完全可以将他类比为Windows系统中的快捷方式。 链接只是一个指向&#xff0c;并不是物理移动&#xff0c;类似Windows系统的快捷方式 1.功能和语法 功能&…...

Spark---RDD(Key-Value类型转换算子)

文章目录 1.RDD Key-Value类型1.1 partitionBy1.2 reduceByKey1.3 groupByKeyreduceByKey和groupByKey的区别分区间和分区内 1.4 aggregateByKey获取相同key的value的平均值 1.5 foldByKey1.6 combineByKey1.7 sortByKey1.8 join1.9 leftOuterJoin1.10 cogroup 1.RDD Key-Value…...

后台代码New出来DataGridTextColumn 动态添加到DataGrain 设置 Margin属性

在 WPF 中给 DataGridTextColumn 设置 MarginProperty 可以通过自定义 DataGridTemplateColumn 来实现。以下是一个示例代码&#xff1a; <DataGrid><DataGrid.Columns><DataGridTemplateColumn><DataGridTemplateColumn.CellTemplate><DataTempla…...

MySQL面试题(下)

09&#xff09;查询学过「张三」老师授课的同学的信息 SELECTs.*,c.cname,t.tnameFROMt_mysql_teacher t,t_mysql_student s,t_mysql_course c,t_mysql_score scWHEREt.tidc.tid and c.cidsc.cid and sc.sids.sid and tname 张三 10&#xff09;查询没有学全所有课程的同学的…...

【Linux】如何检查Linux用户是否具有sudo权限

问题背景或前提知识 在Linux系统中&#xff0c;sudo&#xff08;superuser do&#xff09;是一个重要的命令&#xff0c;它允许普通用户以系统管理员的身份执行命令。了解用户是否拥有sudo权限对于系统管理和安全性来说是非常重要的。 技术名词解释 sudo&#xff1a;一种程序…...

2024.1.13 Kafka六大机制和Structured Streaming

目录 一 . Kafka中生产者数据分发策略 二. Kafka消费者的负载均衡机制 三 . 数据不丢失机制 生产者端是如何保证数据不丢失的呢&#xff1f; Broker端如何保证数据不丢失 消费端如何保证数据不丢失 Kafka中消费者如何对数据仅且只消费一次 四 . 启动Kafka eagle命令 数…...

遥感影像-语义分割数据集:Landsat8云数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该云数据集包括RGB三通道的高分辨率图像&#xff0c;在全球不同区域的分辨率15米。这些图像采集自Lansat8的五种主要土地覆盖类型&#xff0c;即水、植被、湿地、城市、冰雪和贫瘠土地。 KeyValue卫星类型landsat8覆盖区域未知场景水、植被、…...

YOLOV8在coco128上的训练

coco128是coco数据集的子集只有128张图片 训练代码main.py from ultralytics import YOLO# Load a model model YOLO("yolov8n.yaml") # build a new model from scratch model YOLO("yolov8n.pt") # load a pretrained model (recommended for trai…...

设计模式——享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它的主要目的是通过共享已存在的对象来大幅度减少需要创建的对象数量&#xff0c;从而降低系统内存消耗和提高性能。它通过将对象的状态划分为内部状态&#xff08;Intrinsic State&#xf…...

【Python机器学习】分类器的不确定估计——决策函数

scikit-learn接口的分类器能够给出预测的不确定度估计&#xff0c;一般来说&#xff0c;分类器会预测一个测试点属于哪个类别&#xff0c;还包括它对这个预测的置信程度。 scikit-learn中有两个函数可以用于获取分类器的不确定度估计&#xff1a;decidion_function和predict_pr…...

云原生周刊:K8sGPT 加入 CNCF | 2024.1.8

开源项目推荐 VolSync VolSync 使用 rsync 或 rclone 在集群之间异步复制 Kubernetes 持久卷。它还支持通过 Restic 创建持久卷的备份。 KubeClarity KubeClarity 是一种用于检测和管理软件物料清单 (SBOM) 以及容器映像和文件系统漏洞的工具。它扫描运行时 K8s 集群和 CI/…...

LightGBM原理和调参

背景知识 LightGBM(Light Gradient Boosting Machine)是一个实现GBDT算法的框架&#xff0c;具有支持高效率的并行训练、更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以处理海量数据等优点。 普通的GBDT算法不支持用mini-batch的方式训练&#xff0c;在每一次…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...