gpt4 book ai didi

java - 使用 JLists 和 ListModels

转载 作者:行者123 更新时间:2023-11-29 04:02:04 24 4
gpt4 key购买 nike

我定义了一个 DirectoryListModel 类,它扩展了 Java Api 的 AbstractListModel 类。

在内部,我有一个 File 对象列表。我将 getElementAt(int index) 方法定义为:

@Override
public Object getElementAt(int index) {
return directoryElements.get(index)
}

问题是,当我尝试使用 DirectoryListModel 运行 JList 时,它将显示文件的完整路径,而不仅仅是文件名。我可以将此代码更改为:

@Override
public Object getElementAt(int index) {
return directoryElements.get(index).getName();

}

它会产生奇迹,但问题是在 onclick 事件中我想要 File 对象,这样我就可以对它们进行一些检查(检查它们是否是目录等)。如果我让 getElementAt() 返回一个字符串,我就失去了这种可能性,因此我想知道是否有一种方法可以在 JList 在我的窗口中显示它们之前格式化我的文件对象或者是否有任何简单优雅的方式来做到这一点。

谢谢

最佳答案

出于两个原因,我会扩展 DefaultListCellRenderer 以添加您的自定义代码:

a) 您将获得默认渲染器的默认行为,如边框、行选择突出显示...
b) 渲染器(与所有 Swing 渲染器一样)已针对更快的绘制进行了优化。

class MyRenderer extends DefaultListCellRenderer
{
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
Component c = super.getListCellRendererComponent(list,value,index,false,false) ;
JLabel label = (JLabel)c;

label.setText(...);

return c ;
}
}

阅读 How to Use Lists 上的 Swing 教程部分有关渲染器的更多信息。

关于java - 使用 JLists 和 ListModels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2823570/

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