Archive

Archives pour la catégorie ‘Java’

Paint a linear gradient

28/01/2009
Commentaires fermés

/*
 *
 */
public void paint(Graphics g, Color c1, Color c2) {
        Graphics2D g2 = (Graphics2D)g;
        Paint oldPainter = g2.getPaint();
        g2.setPaint(new GradientPaint(new Point2D.Double(0, 0), c1, new Point2D.Double(getWidth(), 0), c2));
        g2.fillRect(0, 0, getWidth(), getHeight());
        g2.setPaint(oldPainter);
}

/*
 * Without gradiant paint
 */
public void paint(Graphics g, Color c1, Color c2) {
    // Add gradient (This might be done before !!)
    Graphics2D g2 = (Graphics2D)g;
    for (int i = -1; i <= this.getWidth(); ++i) {
      float ratio = (float)i / (float)this.getWidth();
      int red = (int)(c2.getRed() * ratio + c1.getRed() * (1 - ratio));
      int green = (int)(c2.getGreen() * ratio + c1.getGreen() * (1 - ratio));
      int blue = (int)(c2.getBlue() * ratio + c1.getBlue() * (1 - ratio));
      Color c = new Color(red, green, blue);
      Rectangle2D r = new Rectangle2D.Float(1 + i, 0, this.getWidth(), this.getHeight());
      g2.setPaint(c);
      g2.fill(r);
    }
    // Paint using super methods
    super.paint(g);
}

Java

MySplitPaneUI (A split pane with 3 dots)

28/01/2009
Commentaires fermés

/*
 * Created on 14 avr. 2006
 */
import java.awt.Graphics;
import java.awt.event.MouseEvent;

import javax.swing.JComponent;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicSplitPaneDivider;
import javax.swing.plaf.basic.BasicSplitPaneUI;

/**
 * MySplitPaneUI is a UI implementation of BasicSplitPaneUI
 * that does not show any divider.
 *
<pre>
 * +----------+
 * | Changes: |
 * +----------+
 *    [19/09/2006]
 *       - Added
 * </pre>
<p> */<br />
public class MySplitPaneUI extends BasicSplitPaneUI {</p>
<p>    public static ComponentUI createUI(JComponent x) {<br />
        return new MySplitPaneUI();<br />
    }</p>
<p>    public BasicSplitPaneDivider createDefaultDivider() {<br />
        return new MySplitPaneDivider(this);<br />
    }<br />
}</p>
<p>class MySplitPaneDivider extends BasicSplitPaneDivider {<br />
    float strokeThickness = 2f;<br />
    float miterLimit = 2f;<br />
    float[] dashPattern = {2f};<br />
    float dashPhase = 2f;</p>
<p>    public MySplitPaneDivider(BasicSplitPaneUI ui) {<br />
        super(ui);<br />
        ui.getSplitPane().setContinuousLayout(true);<br />
    }</p>
<p>    protected class DragController extends BasicSplitPaneDivider.DragController {<br />
        public DragController(MouseEvent event) {<br />
            super(event);<br />
        }<br />
    }</p>
<p>    public void paint(Graphics g) {<br />
        // do not paint any thing ! if you want an invisible split pane (like Eclipse)<br />
        // Paint 3 dots<br />
        Graphics2D gg = (Graphics2D)g;<br />
        gg.setColor(Color.darkGray);<br />
        gg.setStroke(new BasicStroke(strokeThickness, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, miterLimit, dashPattern, dashPhase));        </p>
<p>        if(this.splitPane.getOrientation() == JSplitPane.VERTICAL_SPLIT) {<br />
            g.drawLine(getWidth()/2-7, getHeight()/2, getWidth()/2+7, getHeight()/2);<br />
        } else {<br />
            g.drawLine(getWidth()/2, getHeight()/2-7, getWidth()/2, getHeight()/2+7);<br />
        }<br />
    }<br />
}<br />

Java

Paint an arrow extremity in Java 2D

28/01/2009
Commentaires fermés

protected void paintArrowExtremity(Graphics2D g, int x1, int y1, int x2, int y2, double factor) {
        // Angles (téta)
        double theta;
        double thetabis = 0;
        // Angle de la pointe
        double alpha = Math.toRadians(90-30);
        // Longueur de la fl?che
        int l = (int) (7*factor);  

        int x[] = new int[3];
        int y[] = new int[3];

        theta = (x2-x1)/(Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
        thetabis = Math.acos(theta);

        if (y1<y2)
        {
             x[0]=x2;
             x[1]=(int) (l*Math.cos(thetabis-Math.PI/2-alpha)+x2);
             x[2]=(int) (l*Math.cos(thetabis+Math.PI/2+alpha)+x2);
             y[0]=y2;
             y[1]=(int) (l*Math.sin(thetabis-Math.PI/2-alpha)+y2);
             y[2]=(int) (l*Math.sin(thetabis+Math.PI/2+alpha)+y2);
        }
        else
        {
             x[0]=x2;
             x[1]=(int) (l*Math.cos(thetabis-Math.PI/2-alpha)+x2);
             x[2]=(int) (l*Math.cos(thetabis+Math.PI/2+alpha)+x2);
             y[0]=y2;
             y[1]=y2+(y2-(int) (l*Math.sin(thetabis-Math.PI/2-alpha)+y2));
             y[2]=y2+(y2-(int) (l*Math.sin(thetabis+Math.PI/2+alpha)+y2));
        }

        g.fillPolygon(x, y, 3);
}

Java

Litle RMI howto

28/01/2009
Commentaires fermés

Dans le main du serveur:


LocateRegistry.createRegistry(9999);
System.setSecurityManager(new RMISecurityManager());
CalculatorImpl calc = new CalculatorImpl();
Naming.rebind("//localhost:9999/calculator", calc);

Coté client:


Calculator calc = (Calculator) Naming.lookup("//" + serverIP + ":" + portServer + "/calculator");
System.out.println(calc.add(2, 5));

Exécution:


java -cp $CLASSPATH -Djava.security.policy=policy.txt ServerMainClass

Java

[Struts] Dowload Action

28/01/2009
Commentaires fermés

    /**
     * Download a Content.
     * @param mapping The action mapping
     * @param form The action form
     * @param request The requst
     * @param response The response
     * @return a valid struts mapping
     */
    public final ActionForward download(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response) {
        byte[] content = request.getParameter("content");
        String fileName = request.getParameter("fileName");
        String fileContentType = request.getParameter("fileContentType");
        String view = request.getParameter("view");
        OutputStream out = null;
        try {
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "max-age=1, must-revalidate");
            // This will ask the user to open or save the content (without it the browser will try to download it)
            if (!"true".toLowerCase().equals(view) || StringHelper.isEmpty(doc.getFileContentType())) {
                response.setHeader("Content-Disposition", "attachment; filename="+fileName);
            }
            response.setContentLength(content.length);
            if (!StringHelper.isEmpty(fileContentType)) {
                response.setContentType(fileContentType);
            } else {
                response.setContentType("application/octet-stream");
            }
            out = response.getOutputStream();
            out.write(content);
        } catch (Exception ex) {
            logger.error(ex.getMessage(), ex);
            return mapping.findForward(ERROR);
        } finally {
            if (out != null) {
                try {
                    out.flush();
                    out.close();
                } catch (Exception ex) {
                    logger.error(ex.getMessage(), ex);
                }
            }
        }
        return null;
    }

Java

[Struts] Populate Potential new Element in an array

28/01/2009
Commentaires fermés

    /**
     * Populate the bean prefix using request parameters.
     * @param request The HTTP request
     * @param form ..
     * @param arrayKey ..
     * @param arrayItemClazz ..
     */
    public static void getPotentialNewElement(final HttpServletRequest request, final Object beanForm, final String arrayKey, final Class arrayItemClazz) throws Exception {
        Object array = ReflectHelper.invokeGetter(beanForm, arrayKey);
        if (array.getClass().isArray()) {
            int offsetIndex = Array.getLength(array);
            Object newArrayElement = null;
            List getters = ReflectHelper.getGettersRecursivly(arrayItemClazz);
            do {
                for (Iterator iter = getters.iterator(); iter.hasNext();) {
                    Method getter = (Method) iter.next();
                    if (getter.getReturnType().getName().startsWith("java.lang.String")) {
                        String getterKey = ReflectHelper.getFieldName(getter);
                        String value = request.getParameter(arrayKey + "[" + offsetIndex + "]." + getter);
                        if (value != null) {
                            if (newArrayElement == null) {
                                newArrayElement = ReflectHelper.newInstance(arrayItemClazz.getName());
                            }
                            ReflectHelper.invokeSetter(newArrayElement, getterKey, value, String.class);
                        }
                    }
                }
                if (newArrayElement != null) {
                    Object newArray = Array.newInstance(arrayItemClazz, offsetIndex + 1);
                    for (int i = 0; i < offsetIndex; ++i) {
                        Array.set(newArray, i, Array.get(array, i));
                    }
                    offsetIndex++;
                    Array.set(newArray, offsetIndex, newArrayElement);
                }
            } while (newArrayElement != null);
        }
    }

Java

Serialisation Test de bon fonctionnement

28/01/2009
Commentaires fermés

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class TestMain {

	public static void main(String[] args) {
	    // construct test object
	    ObjectA originalObj = new ObjectA();

	    testSerialization(originalObj);

	}

	public static void testSerialization (Object originalObj)
	{
	    ObjectA extractedObj = null;

	    // serialize
	    ByteArrayOutputStream out = new ByteArrayOutputStream();
	    ObjectOutputStream oos;

	    System.out.println("Trying to serialize the object...");
		try {
			oos = new ObjectOutputStream(out);
			oos.writeObject(originalObj);
			oos.close();
			System.out.println("=>> Success.");
		} catch (IOException e) {
			System.err.println("=>> Failure: "+e.getMessage());
			e.printStackTrace();
			return;
		}

	    //deserialize
	    byte[] pickled = out.toByteArray();
	    InputStream in = new ByteArrayInputStream(pickled);
	    ObjectInputStream ois;

	    System.out.println("Trying to deserialize the object...");
		try {
			ois = new ObjectInputStream(in);
		    Object obj = ois.readObject();
		    extractedObj = (ObjectA) obj;
		    System.out.println("=>> Success.");
		} catch (IOException e) {
			System.err.println("=>> Failure: "+e.getMessage());
			return;
		} catch (ClassNotFoundException e) {
			System.err.println("=>> Failure: "+e.getMessage());
			e.printStackTrace();
			return;
		}

	    // test the result
	    System.out.println("Inuring that the extracted object is equal to the original one...");
	    if (!originalObj.equals(extractedObj)) {
	    	System.err.println("=>> Failure: Objects are not equals.");
	    	return;
	    } else {
	    	System.out.println("=>> Success.");
	    }
	  }
}

Java

Get list of sub packages

28/01/2009
Commentaires fermés

public static Package[] getSubPackages(Package pckg) throws IOException, ClassNotFoundException {
    // Translate the package name into an absolute path
    String name = "/" + pckg.getName().replace('.','/');

    // Get a File object for the package
    URL url = Launcher.class.getResource(name);
    File directory = new File(url.getFile());

    if (directory.exists()) {
        // Get the list of the files contained in the package
        File[] files = directory.listFiles();
        ArrayList pckgs = new ArrayList();
        for (int i=0; i<files.length;++i) {

            // we are only interested in .class files
            if (files[i].isDirectory()) {
                // removes the .class extension
                pckgs.add(Package.getPackage(pckg.getName()+"."+files[i].getName()));
            }
        }
        Package[] packages = new Package[pckgs.size()];
        for (int i=0; i<pckgs.size();++i) packages[i] = (Package)pckgs.get(i);
        return packages;
    } else {
        throw new IOException("Invalid directory: "+url);
    }
}    

Java

Print a debug message with the class name and line position

28/01/2009
Commentaires fermés

// Print a debug message with the class container name and the line position
public static void debug(String message) {
    try {
        throw new Throwable();
    } catch (Throwable th) {
        StackTraceElement elmt = th.getStackTrace()[1];
        System.out.println("[DEBUG] "+elmt.getClassName()+"."+elmt.getMethodName()+"("+elmt.getFileName()+":"+elmt.getLineNumber()+") # "+message);
    }
}

Java

[DnD] TransferableLabel extends TransferableObject

28/01/2009
Commentaires fermés

package com.pingus.dnd.transferables;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class TransferableLabel extends TransferableObject {

    public TransferableLabel(final JLabel label, final DataFlavor[] acceptedFlavors, final Transferable defaultTransferableObject) {
        super(label, acceptedFlavors, defaultTransferableObject);
    }

    public TransferableLabel(final JLabel label, final ArrayList acceptedFlavors, final Transferable defaultTransferableObject) {
        super(label, acceptedFlavors, defaultTransferableObject);
    }

    public Object getTransferData(final DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        if(flavor.equals(getPreferredFlavor())) {
            System.out.println("[TransferableLabel] <getTransferData> returning label");
            // Return JLabel
            return this.getObject();
        } else if(flavor.equals(DataFlavor.imageFlavor)) {
            System.out.println("[TransferableLabel] <getTransferData> returning ...");
            // Return Image
            Icon icon = ((JLabel)this.getObject()).getIcon();
            if (icon instanceof ImageIcon) {
                System.out.println("[TransferableLabel] <getTransferData> Image.");
                return ((ImageIcon) icon).getImage();
            }
        } else if(flavor.equals(DataFlavor.stringFlavor)) {
            System.out.println("[TransferableLabel] <getTransferData> returning label text");
            // Return label text
            return ((JLabel)this.getObject()).getText();
        } else if(flavor.equals(DataFlavor.getTextPlainUnicodeFlavor())) {
            return TransferableObject.exportAsInputStream(((JLabel)this.getObject()).getText(), flavor);
        }
        System.out.println("[TransferableLabel] <getTransferData> returning nothing");
        System.out.println("[TransferableLabel] <getTransferData> for flavor "+flavor);
        return super.getTransferData(flavor);
    }
}

Java