All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mdlaf.utils.WrapperSwingUtilities Maven / Gradle / Ivy

There is a newer version: 1.1.4
Show newest version
package mdlaf.utils;

import javax.swing.*;
import java.awt.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class WrapperSwingUtilities {

    private static WrapperSwingUtilities SINGLETON;

    public static WrapperSwingUtilities getInstance() {
        if (SINGLETON == null) {
            SINGLETON = new WrapperSwingUtilities();
        }
        return SINGLETON;
    }

    protected Class wrapperClass;
    protected Method getClippedString;

    private WrapperSwingUtilities() {
        this.initMethodWithJavaVersion();
    }

    public void initMethodWithJavaVersion() {
        try {
            if (Utils.isJavaVersionUnderJava9()) {
                //I can load the method in Swing sun.swing.SwingUtilities2
                this.wrapperClass = Class.forName("sun.swing.SwingUtilities2");
                getClippedString = this.wrapperClass.getMethod("clipStringIfNecessary",
                               new Class[]{ JComponent.class, FontMetrics.class, String.class, int.class});
            }else{
                //I can load method from class javax.swing.plaf.basic.BasicGraphicsUtils
                this.wrapperClass = Class.forName("javax.swing.plaf.basic.BasicGraphicsUtils");
                getClippedString = this.wrapperClass.getMethod("getClippedString",
                        new Class[]{ JComponent.class, FontMetrics.class, String.class, int.class});
            }
        } catch (ClassNotFoundException | NoSuchMethodException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.getCause());
        }
    }

    public String getClippedString(JComponent component, FontMetrics fontMetrics, String text, int availTextWidth){
        try {
            return (String) getClippedString.invoke(wrapperClass, component, fontMetrics, text, availTextWidth);
        } catch (IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
            throw new IllegalArgumentException(e.getCause());
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy