Я не думаю, что вы хотите делать такого рода изменения внутри средства визуализации ячеек, поскольку оно отвечает за отрисовку ячеек списка, которые по умолчанию не являются непрозрачными, а не самого JList.
Вместо этого, почему бы просто не дать вашему JList прозрачный фоновый цвет после его создания?
list.setBackground(new Color(0, 0, 0, 0));
Но если вы сделаете это, вы должны следить за артефактами рисования, которые могут возникнуть при размещении рисунка поверх непрозрачных элементов.Я обнаружил, что перекрашивание контейнера, содержащего JList, может исправить это:
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class JListTest {
private static void createAndShowGui() {
final JFrame frame = new JFrame("JList Test");
final JPanel panel = new JPanel();
String[] listData = {"One", "Two", "Three", "Four", "Five", "Six"};
final JList<String> list = new JList<>(listData);
// list.setOpaque(false);
list.setBackground(new Color(0, 0, 0, 0));
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
panel.repaint();
}
});
panel.add(list);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}
Обратите внимание, что если JList удерживается JScrollPane, то его компоненты должны быть прозрачными, но я не уверен, как выпрокручиваю, если вы не видите полосу прокрутки.