|
What this is
Other links
The source code// $Id: DockLayout.java,v 1.4 2004/08/19 19:27:20 mvw Exp $ // Copyright (c) 2003 The Regents of the University of California. All // Rights Reserved. Permission to use, copy, modify, and distribute this // software and its documentation without fee, and without a written // agreement is hereby granted, provided that the above copyright notice // and this paragraph appear in all copies. This software program and // documentation are copyrighted by The Regents of the University of // California. The software program and documentation are supplied "AS // IS", without any accompanying services from The Regents. The Regents // does not warrant that the operation of the program will be // uninterrupted or error-free. The end-user understands that the program // was developed for research purposes and is advised not to rely // exclusively on the program for any reason. IN NO EVENT SHALL THE // UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, // SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, // ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF // THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF // SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE // PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF // CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, // UPDATES, ENHANCEMENTS, OR MODIFICATIONS. /* * DockLayout.java * * Created on 23 February 2003, 17:14 */ package org.argouml.swingext; import java.awt.*; import java.util.ArrayList; import javax.swing.SwingConstants; /** * Layout Manager to control positions of docked toolbars * @author Christopher Bach */ public class DockLayout extends BorderLayout { private ArrayList north = new ArrayList(1); private ArrayList south = new ArrayList(1); private ArrayList east = new ArrayList(1); private ArrayList west = new ArrayList(1); private Component center = null; private static final int VERTICAL = SwingConstants.VERTICAL; private static final int HORIZONTAL = SwingConstants.HORIZONTAL; /** * The constructor. */ public DockLayout() { } /** * @see java.awt.LayoutManager2#addLayoutComponent(java.awt.Component, * java.lang.Object) */ public void addLayoutComponent(Component c, Object con) { synchronized (c.getTreeLock()) { if (con != null) { String s = con.toString(); if (s.equals(NORTH)) north.add(c); else if (s.equals(SOUTH)) south.add(c); else if (s.equals(EAST)) east.add(c); else if (s.equals(WEST)) west.add(c); else if (s.equals(CENTER)) center = c; } } } /** * @see java.awt.LayoutManager#removeLayoutComponent(java.awt.Component) */ public void removeLayoutComponent(Component c) { north.remove(c); south.remove(c); east.remove(c); west.remove(c); if (c == center) { center = null; } } /** * @see java.awt.LayoutManager#layoutContainer(java.awt.Container) */ public void layoutContainer(Container target) { synchronized (target.getTreeLock()) { Insets insets = target.getInsets(); int top = insets.top; int bottom = target.getHeight() - insets.bottom; int left = insets.left; int right = target.getWidth() - insets.right; int northHeight = getPreferredDimension(north).height; int southHeight = getPreferredDimension(south).height; int eastWidth = getPreferredDimension(east).width; int westWidth = getPreferredDimension(west).width; placeComponents(north, left, top, right - left, northHeight, HORIZONTAL); top += (northHeight + getVgap()); placeComponents(south, left, bottom - southHeight, right - left, southHeight, HORIZONTAL); bottom -= (southHeight + getVgap()); placeComponents(east, right - eastWidth, top, eastWidth, bottom - top, VERTICAL); right -= (eastWidth + getHgap()); placeComponents(west, left, top, westWidth, bottom - top, VERTICAL); left += (westWidth + getHgap()); if (center != null) { center.setBounds(left, top, right - left, bottom - top); } } } // Returns the ideal width for a vertically oriented toolbar // and the ideal height for a horizontally oriented tollbar: private Dimension getPreferredDimension(ArrayList comps) { int w = 0, h = 0; for (int i = 0; i < comps.size(); i++) { Component c = (Component) (comps.get(i)); Dimension d = c.getPreferredSize(); w = Math.max(w, d.width); h = Math.max(h, d.height); } return new Dimension(w, h); } private void placeComponents(ArrayList comps, int x, int y, int w, int h, int orientation) { int offset = 0; Component c = null; if (orientation == HORIZONTAL) { offset = x; for (int i = 0; i < comps.size(); i++) { c = (Component) (comps.get(i)); int cwidth = c.getPreferredSize().width; if (i == comps.size() - 1) cwidth = w - offset; c.setBounds(x + offset, y, cwidth, h); offset += cwidth; } } else { for (int i = 0; i < comps.size(); i++) { c = (Component) (comps.get(i)); int cheight = c.getPreferredSize().height; if (i == comps.size() - 1) cheight = h - offset; c.setBounds(x, y + offset, w, cheight); offset += cheight; } } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.