CoordinateLayout.java
上传用户:haobig99
上传日期:2022-06-15
资源大小:369k
文件大小:3k
源码类别:

J2ME

开发平台:

Java

  1. /*
  2.  * Copyright 2008 Sun Microsystems, Inc.  All Rights Reserved.
  3.  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4.  *
  5.  * This code is free software; you can redistribute it and/or modify it
  6.  * under the terms of the GNU General Public License version 2 only, as
  7.  * published by the Free Software Foundation.  Sun designates this
  8.  * particular file as subject to the "Classpath" exception as provided
  9.  * by Sun in the LICENSE file that accompanied this code.
  10.  *
  11.  * This code is distributed in the hope that it will be useful, but WITHOUT
  12.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13.  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14.  * version 2 for more details (a copy is included in the LICENSE file that
  15.  * accompanied this code).
  16.  *
  17.  * You should have received a copy of the GNU General Public License version
  18.  * 2 along with this work; if not, write to the Free Software Foundation,
  19.  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20.  *
  21.  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  22.  * CA 95054 USA or visit www.sun.com if you need additional information or
  23.  * have any questions.
  24.  */
  25. package com.sun.lwuit.layouts;
  26. import com.sun.lwuit.Component;
  27. import com.sun.lwuit.Container;
  28. import com.sun.lwuit.geom.Dimension;
  29. /**
  30.  * Allows laying out components based on absolute positions/sizes
  31.  * that are adapted based on available space for the layout.
  32.  * The layout 
  33.  *
  34.  * @author Chen Fishbein
  35.  */
  36. public class CoordinateLayout extends Layout{
  37.     
  38.     private int width;
  39.     private int height;
  40.     
  41.     /**
  42.      * This constructor accepts the relative width and height used to define the
  43.      * aspect ratio of the Container
  44.      * 
  45.      * @param width
  46.      * @param height
  47.      */
  48.     public CoordinateLayout(int width, int height){
  49.         this.width = width;
  50.         this.height = height;
  51.     }
  52.     /**
  53.      * This constructor accepts the relative width and height used to define the
  54.      * aspect ratio of the Container
  55.      * 
  56.      * @param d the width/height
  57.      */
  58.     public CoordinateLayout(Dimension d){
  59.         this(d.getWidth(), d.getHeight());
  60.     }
  61.     
  62.     /**
  63.      * @inheritDoc
  64.      */
  65.     public void layoutContainer(Container parent) {
  66.         int numOfcomponents = parent.getComponentCount();
  67.         int parentW = parent.getWidth();
  68.         int parentH = parent.getHeight();
  69.         
  70.         for(int i=0; i< numOfcomponents; i++){
  71.             Component cmp = parent.getComponentAt(i);
  72.             int x = cmp.getX() * parentW /width;
  73.             int y = cmp.getY() * parentH /height;
  74.             cmp.setX(x);
  75.             cmp.setY(y);
  76.             
  77.             cmp.setWidth(cmp.getPreferredW());
  78.             cmp.setHeight(cmp.getPreferredH());
  79.         }
  80.         width = parentW;
  81.         height = parentH;
  82.     }
  83.     /**
  84.      * @inheritDoc
  85.      */
  86.     public Dimension getPreferredSize(Container parent) {
  87.         Dimension retVal = new Dimension();
  88.         int numOfcomponents = parent.getComponentCount();
  89.         for(int i=0; i< numOfcomponents; i++){
  90.             Component cmp = parent.getComponentAt(i);
  91.             retVal.setWidth(Math.max(retVal.getWidth(), cmp.getX() + cmp.getPreferredW()));
  92.             retVal.setHeight(Math.max(retVal.getHeight(), cmp.getY() + cmp.getPreferredH()));
  93.         }
  94.         
  95.         return retVal;
  96.     }
  97.     /**
  98.      * @inheritDoc
  99.      */
  100.     public boolean isOverlapSupported() {
  101.         return true;
  102.     }
  103. }