Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Colorare riga di una JList

    Salve. Come da titolo, avrei il bisogno di colorare il testo di una riga di una JList. Ho provato con setSelectionForeground ma funziona solo quando la riga è selezionata. A me servirebbe selezionare il testo indipendentemente dal fatto che la riga sia selezionata o no. Qualche idea?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    codice:
    list.setForeground(Color.BLUE);
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Originariamente inviato da Alex'87
    codice:
    list.setForeground(Color.BLUE);
    Ma in questo modo colorerei tutte le righe no? A me servirebbe che, alla pressione di un JButton, si colorasse la riga selezionata, e che rimanesse di tale colore anche se non è più selezionata...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Dreamer89
    Ma in questo modo colorerei tutte le righe no? A me servirebbe che, alla pressione di un JButton, si colorasse la riga selezionata, e che rimanesse di tale colore anche se non è più selezionata...
    Writing a Custom Cell Renderer
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    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

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Dreamer89 A me servirebbe che, alla pressione di un JButton, si colorasse la riga selezionata, e che rimanesse di tale colore anche se non è più selezionata...
    Cito:

    Originariamente inviato da Dreamer89
    A me servirebbe selezionare il testo indipendentemente dal fatto che la riga sia selezionata o no



    Forse potresti provare ad usare JXList di SwingX :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Originariamente inviato da Alex'87
    Cito:






    Forse potresti provare ad usare JXList di SwingX :master:
    LOL, intendevo dire "colorare il testo", non selezionare XD

    Cosa sarebbe questa SwingX? Devo scaricarla da qualche parte? Ho provato a fare una ricerchina e non mi pare che JXList abbia quello che mi serve

  8. #8
    Ho risolto 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;
    import java.util.ArrayList;
    
    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");
    	ArrayList < Integer > selectedIndex;
    	
    	public testlist()
    	{
    		super ("testlist");
    		setSize (200, 200);
    		setLocationRelativeTo (null);
    		setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    		
    		selectedIndex = new ArrayList < Integer >();
    		
    		click.addActionListener
    		(
    			new ActionListener()
    			{
    				public void actionPerformed (ActionEvent event)
    				{
    					if (!selectedIndex.contains (list.getSelectedIndex()))
    					{
    						selectedIndex.add (list.getSelectedIndex());						
    					}
    					else
    					{
    						int index = selectedIndex.indexOf (list.getSelectedIndex());
    						selectedIndex.remove (index);
    					}
    					
    					list.updateUI();
    				}
    			}
    		);
    		
    		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());
    			setBackground (isSelected ? Color.BLUE : Color.WHITE);
    			setForeground (isSelected ? Color.WHITE : Color.BLUE);
    			
    			for (Integer element : selectedIndex)
    			{
    				if (element == index)
    				{
    					setForeground (Color.RED);
    				}
    			}
    
    			return this;
    		}
    	}
    	
    	public static void main (String[] args)
    	{
    		new testlist();
    	}
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.