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

NoSuchMethodError PainterIcon.setPainter / manipulatedIcon #48

Closed homebeaver closed 1 year ago

homebeaver commented 1 year ago
-----------> MTree.loadNodes: 263 nodes w/o parent - NO!!!!!!! adding to root)  -  [1]
ADempiere starting: io.homebeaver.gossip.AMenu - java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at io.homebeaver.gossip.Gossip.main(Gossip.java:662)
Caused by: java.lang.NoSuchMethodError: 'void org.jdesktop.swingx.icon.PainterIcon.setPainter(javax.swing.Painter)'
    at io.homebeaver.gossip.MenuPanel$FilteredIconValue.manipulatedIcon(MenuPanel.java:432)  <============= 
    at io.homebeaver.gossip.MenuPanel$FilteredIconValue.<init>(MenuPanel.java:409)
    at io.homebeaver.gossip.MenuPanel.createRolloverIconHighlighter(MenuPanel.java:335)
    at io.homebeaver.gossip.MenuPanel.configureComponents(MenuPanel.java:244)
    at io.homebeaver.gossip.MenuPanel.<init>(MenuPanel.java:68)
    at io.homebeaver.gossip.AMenu.<init>(AMenu.java:146)
    ... 6 more
public class io.homebeaver.gossip.MenuPanel extends JXPanel implements ActionListener 
...
    // <snip> JXTree rollover
    // custom implementation of Highlighter which highlights 
    // by changing the node icon on rollover
    private Highlighter createRolloverIconHighlighter(IconValue delegate) {
        // the icon look-up is left to an IconValue
        final IconValue iv = new FilteredIconValue(delegate); // FilteredIconValue versteckt in TreeDemoIconValues

...
        // wraps the given icon into an ImagePainter with a filter effect
        private Icon manipulatedIcon(JXIcon icon) {
            PainterIcon painterIcon = new PainterIcon(new Dimension(icon.getIconWidth(), icon.getIconHeight()));
            BufferedImage image = ((RadianceIcon)icon).toImage(1);
//            BufferedImage image = (BufferedImage) ((ImageIcon) icon).getImage();
            ImagePainter delegate = new ImagePainter(image);
            delegate.setFilters(new InvertFilter()); // com.jhlabs.image.InvertFilter.InvertFilter() 
            // ==> JH Labs is the alias of Jerry Huxtable .. image processing stuff. @see http://www.jhlabs.com/
            painterIcon.setPainter(delegate); // <============== 432
            return painterIcon;
        }

...
public class org.jdesktop.swingx.icon.PainterIcon implements JXIcon {

    public void setPainter(Painter<? extends Component> painter) {
        this.painter = painter;
    }
homebeaver commented 1 year ago

Iconist Interface in package javax.swing. Implementiert mit public class javax.swing.ImageIcon implements Icon, ... oder durch RadianceIcon Implementierungen. Die Methoden um Image bzw. BufferedImage zu bekommen sind unterschiedlich:

// in RadianceIcon :
    default BufferedImage toImage(double scale) {
        BufferedImage result = RadianceCC.getBlankScaledImage(scale, this.getIconWidth(), this.getIconHeight());
        this.paintIcon(null, result.getGraphics(), 0, 0);
        return result;
    }

// ImageIcon :
    /**
     * Returns this icon's <code>Image</code>.
     * @return the <code>Image</code> object for this <code>ImageIcon</code>
     */
    @Transient
    public Image getImage() {
        return image;
    }

Ursache

In org.jdesktop.swingx.demos.tree.TreeDemoIconValues wurde das nicht beachtet und ein cast ohne test gemacht. das ging prompt schief für ein RadianceIcon:

            BufferedImage image = (BufferedImage) ((ImageIcon) icon).getImage();
homebeaver commented 1 year ago

für HighlighterDemo habe ich eine Matrix gemacht:

HighlightPredicate   | list   | table | tree | treeTable | comboBox
               NEVER : ok     : ok    : ok   : ER1       : ok
              ALWAYS : ok     : ok    : ok   : ok        : ok
           HAS_FOCUS : ok     : ok    : ok   : ok        : ER2
Non-Leaf,  IS_FOLDER : nA     : nA    : ok   : ???       : nA
Leaf Node,   IS_LEAF : ALWAYS : alle  : ok   : ok        : alle
        ROLLOVER_ROW : ???    : ok    : ???  : ok ???    : ???
"Columns 0 and 3"    : alle   : ok    : alle : ok        : alle
"Node Depth Columns.": nix    :
"JButton Type"       : ???    :

ER1 : lässt sich nicht ausschalten
ER2 : kein highlight wenn ausgeklappt
??? : ERROR / BUG --> TODO

und den BUG bei ROLLOVER_ROW in tree nehme ich mir vor

homebeaver commented 1 year ago

Es sind noch einige Punkte zu klären (separate issue):

HighlightPredicate   | list   | table | tree | treeTable | comboBox
               NEVER : ok     : ok    : ok   : ER1       : ok
              ALWAYS : ok     : ok    : ok   : ok        : ok
           HAS_FOCUS : ok     : ok    : ok   : ER2       : ER3
Non-Leaf,  IS_FOLDER : nA 1   : nA    : ok   : ???       : nA
Leaf Node,   IS_LEAF : ALWAYS : alle  : ok   : ???       : alle
        ROLLOVER_ROW : OKnow  : ok    : OKnow: ok ???    : ???
"Columns 0 and 3"    : alle   : ok    : alle : ok        : alle
"Node Depth Columns.": nix    :
"JButton Type"       : ???    :

1: List row is always leaf
ER1 : lässt sich nicht ausschalten
ER2 : ganze Spalte ist highlighted
ER3 : kein highlight wenn ausgeklappt
??? : ERROR