homebeaver / SwingSet

try to complete SwingSet3 org.swinglabs.swingx jars 1.6.6 for java 8 and openjdk 17 (Temurin)
GNU Lesser General Public License v2.1
0 stars 0 forks source link

Rollover Highlighter in XList-demo : Problem with ListCellRenderer #42

Closed homebeaver closed 1 year ago

homebeaver commented 1 year ago

Problembeschreibung:

Alle drei funktionieren wie erwartet - hier Related Merit:

grafik

Allerdings stellt XListDemo nur Texte des Listmodells dar, also:

Adam Barclay (64)
Aleksandras Novikovas (83)
Bill Snyder (93)
Bryan Young (61)
... usw.

Will man zeigen, dass auch Icons in einer Zelle dargestellt werden können (z.B. eine Flagge), so muss man einen anderen CellRenderer implementieren:

list.setCellRenderer(new ContributorCellRenderer(sv));
// mit inner class
    class ContributorCellRenderer extends DefaultListCellRenderer implements StringValue, IconValue, RolloverRenderer {

        static Icon flagIcons[] = new Icon[] { ...
        };

        @Override // implements StringValue
        public String getString(Object value) { ...
        }

        @Override // implements IconValue
        public Icon getIcon(Object value) { ...
        }

Das funktioniert:

grafik

Allerdings funktioniert der oben beschriebene RolloverHighlighter jetzt nicht mehr!

homebeaver commented 1 year ago

Unterschied DefaultListRenderer vs ContributorCellRenderer

DefaultListRenderer

public abstract class AbstractRenderer implements RolloverRenderer, StringValue, Serializable, UIDependent

public class org.jdesktop.swingx.renderer.DefaultListRenderer<E> 
    extends org.jdesktop.swingx.renderer.AbstractRenderer 
    implements ListCellRenderer<E>  // mit Methode Component getListCellRendererComponent

ContributorCellRenderer

public class javax.swing.DefaultListCellRenderer extends JLabel implements ListCellRenderer, Serializable


dh.:
- ContributorCellRenderer kann RolloverRenderer nicht, weil interface `RolloverRenderer ` nicht definiert und nicht implementiert ist !!!
homebeaver commented 1 year ago

Do not use javax.swing.DefaultListCellRenderer

  • and do not sublclass it if you need a Highlighter
  • use org.jdesktop.swingx.renderer.DefaultListRenderer<E> instead
homebeaver commented 1 year ago

now Rollover Merit Highlighter works as expected (cursor over "Ronald Tetsuo"):

grafik