[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