Allora, ho provato a fare così:
Ma alla pressione del pulsante, i cambiamenti non sono immediati, e quando provo a cliccare un elemento della lista, vengono cambiati i colori di tutti gli elementi a partire dall'elemento selezionato in precedenza fino all'elemento correntemente selezionatocodice:import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JList; import javax.swing.JLabel; import javax.swing.ListCellRenderer; import javax.swing.ListSelectionModel; import java.awt.Color; import java.awt.Component; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class testlist extends JFrame { String[] stringlist = {"uno", "due", "tre", "quattro", "cinque", "sei"}; JList list = new JList (stringlist); renderer rend; JPanel panel = new JPanel(); JButton click = new JButton ("click"); boolean flag = false; public testlist() { super ("testlist"); setSize (200, 200); setLocationRelativeTo (null); setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); click.addActionListener ( new ActionListener() { public void actionPerformed (ActionEvent event) { flag = !flag; } } ); rend = new renderer(); list.setCellRenderer (rend); list.setSelectionMode (ListSelectionModel.SINGLE_SELECTION); panel.add (new JScrollPane (list)); panel.add (click); add (panel); setVisible (true); } class renderer extends JLabel implements ListCellRenderer { renderer() { setOpaque (true); } public Component getListCellRendererComponent (JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setText(value.toString()); if (flag) { setBackground (isSelected ? Color.RED : Color.WHITE); setForeground (isSelected ? Color.WHITE : Color.RED); } else { setBackground (isSelected ? Color.BLUE : Color.WHITE); setForeground (isSelected ? Color.WHITE : Color.BLUE); } return this; } } public static void main (String[] args) { new testlist(); } }![]()

Rispondi quotando