[Schmitzm-commits] r1963 - trunk/schmitzm-core/src/main/java/de/schmitzm/swing

scm-commit at wald.intevation.org scm-commit at wald.intevation.org
Fri Apr 20 15:07:38 CEST 2012


Author: mojays
Date: 2012-04-20 15:07:38 +0200 (Fri, 20 Apr 2012)
New Revision: 1963

Modified:
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SwingUtil.java
Log:
SwingUtil.setRelativeFramePositionAbsolute(.): set a relative frame position by absolute pixel margin

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SwingUtil.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SwingUtil.java	2012-04-19 21:48:36 UTC (rev 1962)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/SwingUtil.java	2012-04-20 13:07:38 UTC (rev 1963)
@@ -569,6 +569,48 @@
 	}
 
 	/**
+     * Positioniert ein Fenster auf dem Monitor relativ zur Position eines
+     * anderen Fensters. Das Fenster wird dabei um absolute Pixel verschoben.
+     * 
+     * @param comp
+     *            Eine Komponente des zu positionierenden Fensters oder direkt
+     *            das {@link Window}.
+     * @param relComp
+     *            Fenster (parent Fenster der übergebenen Componente) zu dem das
+     *            Fenster in Relation gesetzt wird (wenn <code>null</code> wird
+     *            der gesamte Monitor verwendet)
+     * @param diffX
+     *            Anzahl an Pixeln, um die das Fenster horizontal verschoben wird (
+     *            <code>diffX > 0 verschiebt nach rechts</code>; <code>diffX < 0 verschiebt
+     *            nach links</code>)
+     * @param diffY
+     *            Anzahl an Pixeln, um die das Fenster vertikal verschoben wird (
+     *            <code>diffY > 0 verschiebt nach unten</code>; <code>diffY < 0 verschiebt
+     *            nach oben</code>)
+     */
+    public static void setRelativeFramePositionAbsolute(Component comp,
+            Component relComp, int diffX, int diffY) {
+      relComp = getParentWindow(relComp);
+      
+      // calculate new position
+      int x = relComp.getX();
+      int y = relComp.getY();
+      x += diffX;
+      y += diffY;
+      
+      // adjust new position according to screen size
+      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+      x = Math.max(x, 0);
+      y = Math.max(y, 0);
+      x = Math.min(x, screenSize.width-diffX);
+      y = Math.min(y, screenSize.height-diffY);
+      
+      // set new frame position
+      Window window = SwingUtil.getParentWindow(comp);
+      window.setLocation( new Point(x,y) );
+    }
+    
+	/**
 	 * Positioniert ein Fenster auf dem Monitor relativ zur Position eines
 	 * anderen Fensters. (0.5/0.5) positioniert das Fenster z.B. genau in der
 	 * Mitte anderen Fensters. (0.25/0.5) setzt das Fenster vertikal in die
@@ -609,10 +651,16 @@
 			frameSize.width = screenSize.width;
 		}
 		// Fenster positionieren
-		int x = relLocation.x
-    		  + Math.round((relSize.width - frameSize.width) * (float) relX);
-        int y = relLocation.y
-              + Math.round((relSize.height - frameSize.height) * (float) relY);
+		int diffX = relSize.width  - frameSize.width;
+		int diffY = relSize.height - frameSize.height;
+		// MS 2012-04-20: Wenn Frames gleich gross, das neue Fenster relativ zum Faktor
+		//                verschoben positionieren
+		if ( diffX == 0 && diffY == 0 ) {
+		  diffX = frameSize.width;
+          diffY = frameSize.height;
+		}
+        int x = relLocation.x  + Math.round(diffX * (float) relX);
+        int y = relLocation.y  + Math.round(diffY * (float) relY);
         x = Math.max(x, 0);
         y = Math.max(y, 0);
         window.setLocation(x,y);



More information about the Schmitzm-commits mailing list