繁体   English   中英

从JList检索JLabel

[英]Retrieving JLabel from JList

我有一个JList实例,其中包含带有图标的JLabel:

JList list = new JList();
list.setModel(model);
list.setCellRenderer(new DefaultListCellRenderer(){
     @Override
     public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        label.setIcon(icon);
        return label;
     }
  });

它工作正常,但是我无法弄清楚如何以编程方式从JLabel检索此图标。 我认为也许可以借助模型来做到这一点:

DefaultListModel model = list.getModel();

或单元格渲染器:

DefaultListCellRenderer model = list.getCellRenderer();

但是它们中没有一个具有检索标签的适当方法,更不用说图标了。 我正在寻求您的帮助:是否可以从JList实例的行中获取图标?

如果您不知道列表的呈现方式,则必须自己重新呈现并检索图标...

int index = 0; //the index of the desired list entry
boolean isSelected = false; //icons my differ if they are selected
boolean cellHasFocus = false; //or have focus
Object value = list.getModel().getElementAt(index); //your 'string' or whatever is in your List
Component comp = list.getCellRenderer().getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (comp instanceof JLabel){
    JLabel pan = (JLabel) comp;
    Icon icon = pan.getIcon();

}

有一个JList实例,其中包含带有图标的JLabel:

您不了解模型和渲染器的概念。

您的JList不包含JLabel。 JList的呈现器是一个JLabel,它恰好显示一个Icon。 渲染器错误,因为列表中的每一行都显示相同的图标。 这不是使用JList的方法。

而是将数据添加到JList的ListModel中。 JList的默认渲染器能够显示String数据或Icon数据。 因此,您需要做的就是向模型添加一个Icon,然后JList将显示Icon:

Icon[] items =
{
    new ImageIcon("copy16.gif"),
    new ImageIcon("about16.gif"),
    new ImageIcon("add16.gif")
};

JList<Icon> list = new JList<Icon>( items );

然后,如果要访问列表中任何给定行的数据,可以使用:

Icon icon = list.getModel().getElementAt(...);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM