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

【JFace】ComboViewer 设置了默认值,但没有效果

问题

在数据回显时,明明在代码中通过comboViewer.setSelection设置了默认值,但没有生效(回显),是怎么回事呢 ?

分析

如果comboViewer.setSelection(new StructuredSelection(items[1]))不起作用,可能是由于以下原因之一:

  1. 内容提供者(Content Provider)设置了不同的元素类型:在使用StructuredSelection设置选中项时,它需要与ComboViewer内容提供者返回的元素类型匹配。如果它们不匹配,StructuredSelection将无法识别要选中的元素。例如,如果ComboViewer的内容提供者返回的是Person对象,那么在使用StructuredSelection设置选中项时,需要使用new StructuredSelection(selectedPerson)

  2. 选中项不存在于ComboViewer的内容中:当使用StructuredSelection设置选中项时,确保它存在于ComboViewer的内容中。否则,ComboViewer将不会选择任何项。

  3. 选中项在内容提供者中具有不同的对象实例:当使用StructuredSelection设置选中项时,它需要与ComboViewer内容提供者返回的元素对象实例匹配。如果它们不匹配,StructuredSelection将无法识别要选中的元素。在这种情况下,可以尝试在内容提供者中为每个元素返回一个唯一的标识符,并使用StructuredSelection设置选中项时,将标识符作为参数传递。

如果您仍然无法解决问题,请检查控件的其他设置和属性,以确保它们没有干扰选中项的设置。例如,将ComboViewer的样式设置为SWT.READ_ONLY,以确保用户无法手动更改选中项。

解决方案

1、首先要根据检查代码,根据以上分析,代码片段的顺序应该如下:

ComboViewer comboViewer = new ComboViewer(parent, SWT.READ_ONLY);
comboViewer.setContentProvider(ArrayContentProvider.getInstance());
comboViewer.setInput(new String[] {"Item 1", "Item 2", "Item 3"});
comboViewer.setSelection(new StructuredSelection("Item 1"));

注意:setInput 一定能要在 setSelection 之前

2、按照1处理了,依然不能回显,应使用如下代码片段处理
这种情况在对元素是对象时,常出现
示例如下:

// 定义 Book 类
class Book {private int id;private String name;private double price;private String publish;public Book(int id, String name, double price, String publish) {this.id = id;this.name = name;this.price = price;this.publish = publish;}public int getId() {return id;}public String getName() {return name;}public double getPrice() {return price;}public String getPublish() {return publish;}@Overridepublic String toString() {return name + " (" + price + ")";}
}// 创建 Book 列表
List<Book> books = new ArrayList<>();
books.add(new Book(1, "Book 1", 10.0, "Publisher 1"));
books.add(new Book(2, "Book 2", 20.0, "Publisher 2"));
books.add(new Book(3, "Book 3", 30.0, "Publisher 3"));// 创建 ComboViewer 控件并设置内容提供者和标签提供者
ComboViewer comboViewer = new ComboViewer(parent, SWT.READ_ONLY | SWT.DROP_DOWN | SWT.BORDER);
comboViewer.setContentProvider(new ArrayContentProvider());
comboViewer.setLabelProvider(new LabelProvider() {@Overridepublic String getText(Object element) {if (element instanceof Book) {Book book = (Book) element;return String.format(" %s (%d)",book.getName(),book.getPrice());}return super.getText(element);}
});// 将 Book 列表设置为 ComboViewer 的输入
comboViewer.setInput(books);// 设置默认选中项为第一个元素
Book bookformDB = bookformDB();// 从数据库查找到的,用于回显
comboViewer.setSelection(new StructuredSelection(bookformDB));

3、如果还不能显示,在设置时做如下处理

在 2 中的代码上做修改

// 设置默认选中项为第一个元素
Book bookformDB = bookformDB();// 从数据库查找到的,用于回显
// 应查找books中的bk查找出来,将其设置为默认值,亲测有效
for(Book bk : books){if(bk.getId() == bookformDB.getId()){comboViewer.setSelection(new StructuredSelection(bk));}
}
http://www.lryc.cn/news/66672.html

相关文章:

  • 基于Redis的Stream结构作为消息队列,实现异步秒杀下单
  • ePWM模块-时基模块(2)
  • 让GPT对话写小说
  • Docker 应用部署-MySQL
  • 电容笔哪个厂家的产品比较好?苹果平板的电容笔推荐
  • 今年的面试难度有点大....
  • 【PWN · ret2libc】ret2libc2
  • 深度学习01-tensorflow开发环境搭建
  • linux相关操作
  • PMP项目管理-[第十章]沟通管理
  • 13个UI设计软件,一次满足你的UI设计需求
  • sentinel介绍
  • 手把手教你怎么搭建自己的ChatGPT和Midjourney绘图(含源码)
  • 继承多态经典笔试题
  • 如何使用Typeface-Helper-自定义字体
  • SubMain CodeIt.Right 2022.2 Crack
  • 文艺复兴的核心是“以人为本”:圣母百花大教堂(Duomo)
  • 校招失败后,在小公司熬了 2 年终于进了百度,竭尽全力....
  • 【C++学习】函数模板
  • 1960-2014年各国二氧化碳排放量(人均公吨数)
  • 【java-04】深入浅出多态、内部类、常用API
  • 【逐函数详细讲解ORB_SLAM2算法和C++代码|Viewer|1-26】
  • 【C语言】测试2 C程序设计初步
  • SpringBoot3 integrate SpringDoc
  • 一文解决Xshell无法连接vmware上的centos
  • ATTCK v13版本战术介绍——防御规避(五)
  • 祁宁:社区问答是激荡企业高级智慧的头脑风暴 | 开发者说
  • linux安装
  • 【Go编程语言】 Go语言基础语法
  • 洗稿用什么软件-洗稿软件免费