问题
在数据回显时,明明在代码中通过comboViewer.setSelection
设置了默认值,但没有生效(回显),是怎么回事呢 ?
分析
如果comboViewer.setSelection(new StructuredSelection(items[1]))
不起作用,可能是由于以下原因之一:
-
内容提供者(Content Provider)设置了不同的元素类型:在使用
StructuredSelection
设置选中项时,它需要与ComboViewer
内容提供者返回的元素类型匹配。如果它们不匹配,StructuredSelection
将无法识别要选中的元素。例如,如果ComboViewer
的内容提供者返回的是Person
对象,那么在使用StructuredSelection
设置选中项时,需要使用new StructuredSelection(selectedPerson)
。 -
选中项不存在于
ComboViewer
的内容中:当使用StructuredSelection
设置选中项时,确保它存在于ComboViewer
的内容中。否则,ComboViewer
将不会选择任何项。 -
选中项在内容提供者中具有不同的对象实例:当使用
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;
}
@Override
public 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() {
@Override
public 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、如果还不能显示,在设置时做如下处理文章来源:https://www.toymoban.com/news/detail-437164.html
在 2 中的代码上做修改文章来源地址https://www.toymoban.com/news/detail-437164.html
// 设置默认选中项为第一个元素
Book bookformDB = bookformDB();// 从数据库查找到的,用于回显
// 应查找books中的bk查找出来,将其设置为默认值,亲测有效
for(Book bk : books){
if(bk.getId() == bookformDB.getId()){
comboViewer.setSelection(new StructuredSelection(bk));
}
}
到了这里,关于【JFace】ComboViewer 设置了默认值,但没有效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!