/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.dlect.ui.helper; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.border.Border; /** * * @author lee */ public class WrappingUtil { private WrappingUtil() { } public static MouseEvent duplicateEvent(MouseEvent e) { return new MouseEvent(e.getComponent(), e.getID(), e.getWhen(), e.getModifiers(), 0, 0, e.getClickCount(), e.isPopupTrigger(), e.getButton()); } private static MouseListener wrapMouseListener(final MouseListener ml, final JComponent origin) { return new MouseListener() { @Override public void mouseClicked(MouseEvent e) { e.setSource(origin); ml.mouseClicked(duplicateEvent(e)); } @Override public void mousePressed(MouseEvent e) { e.setSource(origin); ml.mousePressed(duplicateEvent(e)); } @Override public void mouseReleased(MouseEvent e) { e.setSource(origin); ml.mouseReleased(duplicateEvent(e)); } @Override public void mouseEntered(MouseEvent e) { e.setSource(origin); ml.mouseEntered(duplicateEvent(e)); } @Override public void mouseExited(MouseEvent e) { e.setSource(origin); ml.mouseExited(duplicateEvent(e)); } }; } public static JPanel wrap(JComponent entry, int anchor, int fill, Border b) { JPanel p = new JPanel(); return wrap(p, entry, anchor, fill, b); } public static JPanel wrap(JPanel p, JComponent entry, int anchor, int fill, Border b) { p.setLayout(new GridBagLayout()); p.setBorder(b); GridBagConstraints c = new GridBagConstraints(); c.gridx = c.gridy = 0; c.gridwidth = c.gridheight = 1; c.anchor = anchor; c.fill = fill; c.weightx = c.weighty = 1; p.add(entry, c); return p; } public static JPanel wrapCenterNoFill(JComponent entry, Border b) { return wrap(entry, GridBagConstraints.CENTER, GridBagConstraints.NONE, b); } public static JPanel wrapCenterNoFill(JComponent entry) { return wrap(entry, GridBagConstraints.CENTER, GridBagConstraints.NONE, null); } public static JPanel wrapCenterBothFill(JComponent entry) { return wrap(entry, GridBagConstraints.CENTER, GridBagConstraints.BOTH, null); } public static JPanel wrapCenterBothFill(JComponent entry, Border b) { return wrap(entry, GridBagConstraints.CENTER, GridBagConstraints.BOTH, b); } public static JPanel wrapCenterHorizontalFill(JComponent entry, Border b) { return wrap(entry, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, b); } public static JPanel wrapCenterHorizontalFill(JComponent entry) { return wrap(entry, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, null); } public static void initRedirectListeners(JComponent target, JComponent... redirectors) { for (MouseListener ml : target.getMouseListeners()) { MouseListener m = wrapMouseListener(ml, target); for (JComponent com : redirectors) { com.addMouseListener(m); } } } }