Java jlist custom renderer example
here's an example of creating a custom renderer for a JList component in Java.
A renderer is used to define how the elements in a JList should be displayed. By default, the JList uses a simple renderer that displays the elements as plain text. However, you can create a custom renderer to display the elements in a more complex way.
Here's an example of creating a custom renderer that displays elements as JLabels with an icon and text:
import java.awt.Component; import javax.swing.DefaultListCellRenderer; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JList; public class MyListCellRenderer extends DefaultListCellRenderer { private ImageIcon icon; public MyListCellRenderer(ImageIcon icon) { this.icon = icon; } @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); label.setText(value.toString()); return label; } }
In this example, we extend the DefaultListCellRenderer
class and override the getListCellRendererComponent()
method. This method is called for each element in the JList, and it returns a component to display the element.
In the method, we create a new JLabel
and call the superclass's getListCellRendererComponent()
method to set the text and other properties of the label based on the element's value. We then set the icon on the label using the setIcon()
method, and we set the text using the setText()
method.
Finally, we return the label as the component to display the element.
To use this custom renderer in a JList, you would create a new instance of the renderer and set it on the JList using the setCellRenderer()
method. Here's an example:
import java.awt.BorderLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; public class MyListExample extends JFrame { public MyListExample() { super("List Example"); String[] items = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"}; ImageIcon icon = new ImageIcon("path/to/icon.png"); JList<String> list = new JList<>(items); list.setCellRenderer(new MyListCellRenderer(icon)); JScrollPane scrollPane = new JScrollPane(list); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(scrollPane, BorderLayout.CENTER); add(panel); pack(); setLocationRelativeTo(null); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new MyListExample(); } }
In this example, we create a new JList with an array of strings representing the items to display. We create a new ImageIcon with the path to an icon image file, and we create a new instance of the MyListCellRenderer
class with the icon.
We set the cell renderer on the JList using the setCellRenderer()
method, and we create a new JScrollPane with the JList. We add the JScrollPane to a new JPanel using BorderLayout.CENTER, and we add the panel to the JFrame.
We then call the pack()
method to resize the JFrame to fit its contents, center it on the screen using setLocationRelativeTo()
, make it visible with setVisible(true)
, and set the default close operation to exit the application when the JFrame is closed.
When