栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java Swing:具有ListCellRenderer的JList所选项目的高度不同

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java Swing:具有ListCellRenderer的JList所选项目的高度不同

多亏了Rastislav Komara,我得以轻松解决此问题:

我创建了一个扩展BasicListUI的内部类,并创建了在ListSelectionListener.valueChanged上调用的公共方法:

private class MyRenderer implements ListCellRenderer {    public int listSelectedIndex = -1;    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {        if (index == listSelectedIndex) return new Yeah(isSelected);        else return new Oh();    }}MyRenderer lcr = new MyRenderer();private class MyListUI extends BasicListUI {    public void triggerUpdate() {        lcr.listSelectedIndex = list.getSelectedIndex();        updateLayoutState();        list.revalidate();    }}

JList高度更改时,通常会触发updateLayoutState方法。我在这里所做的唯一“疯狂”的事情是我的渲染器需要知道所选索引是什么。这是因为updateLayoutState方法在高度计算中不使用选定的索引。以某种方式在getListCellRendererComponent中使用list.getSelectedIndex()效果不佳。

编辑:
也检查nevster和kleopatra的分析器,它们看起来更聪明,请首先尝试…



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609726.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号