Allora, ho provato a fare così:
codice:
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();
}
}
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 selezionato