Tell me how to customize the list created in Java? ( java.awt.List
) Namely, you need to add separators between elements.
2 answers
To do this, you will have to override the Render for the list.
Here is a ready-made example with separators with JComboBox
:
import javax.swing.plaf.basic.*; import java.awt.event.*; import javax.swing.*; import java.awt.*; public class Test extends JFrame { public Test() { getContentPane().setLayout(new FlowLayout()); final JComboBox combobox = new JComboBox(new Object[] { "Item 1", new JSeparator(JSeparator.HORIZONTAL), "Item 2", new JSeparator(JSeparator.HORIZONTAL), "Item 3", new JSeparator(JSeparator.HORIZONTAL), "Item 4", "Item 5" } ); getContentPane().add(combobox); combobox.setRenderer(new SeparatorComboBoxRenderer()); combobox.addActionListener(new SeparatorComboBoxListener(combobox)); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent we) { System.exit(1); } }); setSize(new Dimension(200, 200)); } public static void main(String[] args) throws Exception { Test main = new Test(); main.setVisible(true); } } class SeparatorComboBoxRenderer extends BasicComboBoxRenderer implements ListCellRenderer { public SeparatorComboBoxRenderer() { super(); } @Override public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } setFont(list.getFont()); if (value instanceof Icon) { setIcon((Icon)value); } if (value instanceof JSeparator) { return (Component) value; } else { setText((value == null) ? "" : value.toString()); } return this; } } class SeparatorComboBoxListener implements ActionListener { JComboBox combobox; Object oldItem; SeparatorComboBoxListener(JComboBox combobox) { this.combobox = combobox; combobox.setSelectedIndex(0); oldItem = combobox.getSelectedItem(); } @Override public void actionPerformed(ActionEvent e) { Object selectedItem = combobox.getSelectedItem(); if (selectedItem instanceof JSeparator) { combobox.setSelectedItem(oldItem); } else { oldItem = selectedItem; } } }
|
You need to create your own JList class and set it to Renderer. It is necessary to implement the ListCellRenderer interface for the class representing the reader!
Perhaps this answer will help you, an example specifically for JList!
|