Делаю список логических дисков, назначаю ему рендер. В этом коде рендер стандартный с небольшими настройками цвета фона и иконка дефолтной темы.
public class mainFrame {
public static JList list;
public static File[] data;
public mainFrame() {
data = File.listRoots();
list = new JList(data);
list.setCellRenderer(new MyListCellRenderer());
}
class MyListCellRenderer extends DefaultListCellRenderer{
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Component component = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); // Получаем ссылку на Component от DefaultCellRenderer
JLabel label = (JLabel) component; // Приводим ссылку к типу JLabel
Icon icon = UIManager.getIcon("Tree.closedIcon"); // Корректируем JLabel с помощью добавления к ней иконки
label.setIcon(icon);
super.setBackground(isSelected ? Color.ORANGE : Color.white);
return label; // Возвращаем получившийся JLabel, который отображается в JList
}
}
В другом примере подсмотрел такой код рендерера:
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.setBackground(isSelected ? Color.green : Color.white);
if( !value.equals("..") ) {
File file = new File(value.toString());
if( file.isFile() ) {
super.setIcon(iiFile);
} else super.setIcon(iiFolder);
} else if(value.equals("..")) {
setIcon(null);
}
return this;
}
Здесь автор проверяет папка это или файл, проверяет наличие корневой директории. Я пробовал использовать этот код в моем рендере, но почему то он не работает. При запуске программы назначает иконку Папки для дисков, если войти в один из них, то на всех элементах(папках и файлах) так же назначает иконку Папки. А хочется чтобы диски имели иконку диска, папки иконку папки, файлы - файлов.
Подскажите, как довести сие до ума?
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники