Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package net.miginfocom.swing;
  /*
   * License (BSD):
   * ==============
   *
   * Copyright (c) 2004, Mikael Grev, MiG InfoCom AB. (miglayout (at) miginfocom (dot) com)
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  * Redistributions of source code must retain the above copyright notice, this list
  * of conditions and the following disclaimer.
  * Redistributions in binary form must reproduce the above copyright notice, this
  * list of conditions and the following disclaimer in the documentation and/or other
  * materials provided with the distribution.
  * Neither the name of the MiG InfoCom AB nor the names of its contributors may be
  * used to endorse or promote products derived from this software without specific
  * prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
  * OF SUCH DAMAGE.
  *
  * @version 1.0
  * @author Mikael Grev, MiG InfoCom AB
  *         Date: 2006-sep-08
  */
 
 import javax.swing.*;
 import java.awt.*;
 
 public class SwingComponentWrapper implements ComponentWrapper
 {
 	private static boolean maxSet = false;
 
 	private static boolean vp = true;

Debug color for component bounds outline.
 
 	private static final Color DB_COMP_OUTLINE = new Color(0, 0, 200);
 
 	private final Component c;
 	private int compType = ;
 	private Boolean bl = null;
 	private boolean prefCalled = false;
 
 	{
 		this. = c;
 	}
 
 	public final int getBaseline(int widthint height)
 	{
 		if ( == null)
 			return -1;
 
 		try {
 			Object[] args = new Object[] {
 				width < 0 ? .getWidth() : width,
 				height < 0 ? .getHeight() : height
 			};
 
 			return (Integer.invoke(args);
 		} catch (Exception e) {
 			return -1;
 		}
 	}
 
 	public final Object getComponent()
 	{
 		return ;
 	}

Cache.
 
 	private final static IdentityHashMap<FontMetricsPoint.FloatFM_MAP = new IdentityHashMap<FontMetricsPoint.Float>(4);
 	private final static Font SUBST_FONT = new Font("sansserif"., 11);
 
 	public final float getPixelUnitFactor(boolean isHor)
 	{
 		switch (PlatformDefaults.getLogicalPixelBase()) {
 				Font font = .getFont();
				FontMetrics fm = .getFontMetrics(font != null ? font : );
				Point.Float p = .get(fm);
				if (p == null) {
					p = new Point.Float(((floatr.getWidth()) / 6f, ((floatr.getHeight()) / 13.27734375f);
					.put(fmp);
				}
				return isHor ? p.x : p.y;
				Float s = isHor ? PlatformDefaults.getHorizontalScaleFactor() : PlatformDefaults.getVerticalScaleFactor();
				if (s != null)
					return s;
				return (isHor ? getHorizontalScreenDPI() : getVerticalScreenDPI()) / (float) PlatformDefaults.getDefaultDPI();
			default:
				return 1f;
		}
	}
//	/** Cache.
//	 */
//	private final static IdentityHashMap<FontMetrics, Point.Float> FM_MAP2 = new IdentityHashMap<FontMetrics, Point.Float>(4);
//	private final static Font SUBST_FONT2 = new Font("sansserif", Font.PLAIN, 11);
//
//	public float getDialogUnit(boolean isHor)
//	{
//		Font font = c.getFont();
//		FontMetrics fm = c.getFontMetrics(font != null ? font : SUBST_FONT2);
//		Point.Float dluP = FM_MAP2.get(fm);
//		if (dluP == null) {
//			float w = fm.charWidth('X') / 4f;
//			int ascent = fm.getAscent();
//			float h = (ascent > 14 ? ascent : ascent + (15 - ascent) / 3) / 8f;
//
//			dluP = new Point.Float(w, h);
//			FM_MAP2.put(fm, dluP);
//		}
//		return isHor ? dluP.x : dluP.y;
//	}
	public final int getX()
	{
		return .getX();
	}
	public final int getY()
	{
		return .getY();
	}
	public final int getHeight()
	{
		return .getHeight();
	}
	public final int getWidth()
	{
		return .getWidth();
	}
	public final int getScreenLocationX()
	{
		Point p = new Point();
		SwingUtilities.convertPointToScreen(p);
		return p.x;
	}
	public final int getScreenLocationY()
	{
		Point p = new Point();
		SwingUtilities.convertPointToScreen(p);
		return p.y;
	}
	public final int getMinimumHeight(int sz)
	{
		if ( == false) {
			.getPreferredSize(); // To defeat a bug where the minimum size is different before and after the first call to getPreferredSize();
			 = true;
		}
	}
	public final int getMinimumWidth(int sz)
	{
		if ( == false) {
			.getPreferredSize(); // To defeat a bug where the minimum size is different before and after the first call to getPreferredSize();
			 = true;
		}
	}
	public final int getPreferredHeight(int sz)
	{
		// If the component has not gotten size yet and there is a size hint, trick Swing to return a better height.
		if (.getWidth() == 0 && .getHeight() == 0 && sz != -1)
			.setBounds(.getX(), .getY(), sz, 1);
	}
	public final int getPreferredWidth(int sz)
	{
		// If the component has not gotten size yet and there is a size hint, trick Swing to return a better height.
		if (.getWidth() == 0 && .getHeight() == 0 && sz != -1)
			.setBounds(.getX(), .getY(), 1, sz);
	}
	public final int getMaximumHeight(int sz)
	{
		if (!isMaxSet())
	}
	public final int getMaximumWidth(int sz)
	{
		if (!isMaxSet())
	}
	private boolean isMaxSet(Component c)
	{
		if ( != null) {
			try {
				return (Boolean.invoke(c, (Object[]) null);
catch (Exception e) {
				 = null;  // So we do not try every time.
			}
		}
	}
	public final ContainerWrapper getParent()
	{
		return p != null ? new SwingContainerWrapper(p) : null;
	}
	public final int getHorizontalScreenDPI()
	{
		return PlatformDefaults.getDefaultDPI();
	}
	public final int getVerticalScreenDPI()
	{
		return PlatformDefaults.getDefaultDPI();
	}
	public final int getScreenWidth()
	{
		try {
catch (HeadlessException ex) {
			return 1024;
		}
	}
	public final int getScreenHeight()
	{
		try {
catch (HeadlessException ex) {
			return 768;
		}
	}
	public final boolean hasBaseline()
	{
		if ( == null) {
			try {
				if ( == null || .invoke().toString().equals("OTHER")) {
else {
					 = getBaseline(d.widthd.height) > -1;
				}
catch (Throwable ex) {
			}
		}
		return ;
	}
	public final String getLinkId()
	{
		return .getName();
	}
	public final void setBounds(int xint yint widthint height)
	{
		.setBounds(xywidthheight);
	}
	public boolean isVisible()
	{
		return .isVisible();
	}
	public final int[] getVisualPadding()
	{
		if ( &&  instanceof JTabbedPane) {
			if (UIManager.getLookAndFeel().getClass().getName().endsWith("WindowsLookAndFeel"))
				return new int[] {-1, 0, 2, 2};
		}
		return null;
	}
	public static boolean isMaxSizeSetOn1_4()
	{
		return ;
	}
	public static void setMaxSizeSetOn1_4(boolean b)
	{
		 = b;
	}
	public static boolean isVisualPaddingEnabled()
	{
		return ;
	}
	public static void setVisualPaddingEnabled(boolean b)
	{
		 = b;
	}
	public final void paintDebugOutline()
	{
		if (.isShowing() == false)
			return;
		if (g == null)
			return;
		g.setStroke(new BasicStroke(1f, .., 10f, new float[] {2f, 4f}, 0));
		g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
	}
	public int getComponetType(boolean disregardScrollPane)
	{
			 = checkType(disregardScrollPane);
		return ;
	}
	public int getLayoutHashCode()
	{
		int hash = d.width + (d.height << 5);
		hash += (d.width << 10) + (d.height << 15);
		hash += (d.width << 20) + (d.height << 25);
		if (.isVisible())
			hash += 1324511;
		String id = getLinkId();
		if (id != null)
			hash += id.hashCode();
		return hash;
	}
	private int checkType(boolean disregardScrollPane)
	{
		Component c = this.;
		if (disregardScrollPane) {
			if (c instanceof JScrollPane) {
else if (c instanceof ScrollPane) {
				c = ((ScrollPanec).getComponent(0);
			}
		}
		if (c instanceof JTextField || c instanceof TextField) {
else if (c instanceof JLabel || c instanceof Label) {
			return ;
else if (c instanceof JToggleButton || c instanceof Checkbox) {
else if (c instanceof AbstractButton || c instanceof Button) {
			return ;
else if (c instanceof JComboBox || c instanceof Choice) {
			return ;
else if (c instanceof JTextComponent || c instanceof TextComponent) {
else if (c instanceof JPanel || c instanceof Canvas) {
			return ;
else if (c instanceof JList || c instanceof List) {
			return ;
else if (c instanceof JTable) {
			return ;
else if (c instanceof JSeparator) {
else if (c instanceof JSpinner) {
			return ;
else if (c instanceof JProgressBar) {
else if (c instanceof JSlider) {
			return ;
else if (c instanceof JScrollPane) {
else if (c instanceof JScrollBar || c instanceof Scrollbar) {
else if (c instanceof Container) {    // only AWT components is not containers.
		}
		return ;
	}
	public final int hashCode()
	{
	}
	public final boolean equals(Object o)
	{
		if (o instanceof ComponentWrapper == false)
			return false;
	}

Cached method used for getting base line with reflection.
	private static Method BL_METHOD = null;
	private static Method BL_RES_METHOD = null;
	static {
		try {
			 = Component.class.getDeclaredMethod("getBaseline"new Class[] {int.classint.class});
			 = Component.class.getDeclaredMethod("getBaselineResizeBehavior"); // 3.7.2: Removed Class<?> null since that made the method inaccessible.
catch (Throwable e) { // No such method or security exception
		}
	}
	private static Method IMS_METHOD = null;
	static {
		try {
			 = Component.class.getDeclaredMethod("isMaximumSizeSet", (Class[]) null);
catch (Throwable e) { // No such method or security exception
		}
	}
New to GrepCode? Check out our FAQ X