gpt4 book ai didi

java - Swing 中未发生列表选择

转载 作者:行者123 更新时间:2023-12-02 08:24:27 25 4
gpt4 key购买 nike

嗨,我有一个 JLIST 并为其分配了一个 cellRenderer。但我无法选择列表中的元素。实际上它已被选中,但从视觉上我们看不到它已被选中,这意味着我无法看到列表中的哪个项目被选中。

我的列表的屏幕截图: enter image description here

预期的是 enter image description here

第二个屏幕截图没有使用 CellRenderer。但是当我添加 CellRenderer 时,我无法在列表中看到所选项目。

当您将 CellRenderer 添加到列表时,这是正常行为吗?

我做错了什么???

编辑:-

这是我的 CellRenderer 类:

public class ContactsRender extends JLabel implements ListCellRenderer {

private static final long serialVersionUID = 1L;

ImageIcon img;

public ContactsRender(){
setOpaque(true);
setIconTextGap(12);
setBackground(Color.WHITE);
setForeground(Color.black);
}

@Override
public Component getListCellRendererComponent(JList list,
Object value, int index, boolean isSelected,
boolean cellHasFocus) {
if(value != null){
User user = (User) value;
String pres = user.getPresence().toLowerCase();
if(pres.contains("unavailable")){
img = new ImageIcon("res/offline.jpg");
} else {
img = new ImageIcon("res/online.jpg");
}
setText(user.getName());
setIcon(img);

return this;
}
return null;
}

最佳答案

您错误地实现了单元格渲染器。渲染器负责将渲染器背景设置为选择颜色。

阅读 JList API 并点击有关“如何使用列表”的 Swing 教程的链接,您将在其中找到使用 JList 的工作示例。您还将找到有关编写渲染器和示例的部分。

编辑:另外,我刚刚注意到您正在渲染器代码中读取图标。你绝对不应该这样做。该图标只能在创建渲染器时读取一次,然后缓存该图标。每次需要重新绘制单元格时,都会调用渲染器,因此继续读取图标效率不高。

关于java - Swing 中未发生列表选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4813514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com