All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.pivot.wtk.BoxPane Maven / Gradle / Ivy

The newest version!
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to you under the Apache License,
 * Version 2.0 (the "License"); you may not use this file except in
 * compliance with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.pivot.wtk;

import org.apache.pivot.util.ListenerList;

/**
 * Container that arranges components in a line, either vertically or
 * horizontally.
 *
 * 

Layout considerations: Note that by default, a BoxPane does not pass any * preferred size information to its components. That means, for example, * that the preferred width of a horizontal BoxPane is simply the sum of * the preferred widths of its components, plus whatever extra space is * dictated by its padding and spacing styles. * This is also true in the orthogonal dimension if the fill * style is not set: the preferred height of a horizontal BoxPane is the * maximum preferred height of its components (plus padding, if any). * *

If a BoxPane is given less than its preferred size by its parent * container, then the contents will be clipped; if given more than its * preferred size, the contents will not be stretched to fill the space. * *

This behavior of BoxPane can be useful for "canceling" the layout * effects of a parent container and/or to align a component that does * not have its own alignment styles. For example, if you place a * PushButton in a cell of a TablePane, the button will expand to fill the * whole cell. If instead you place the button inside a BoxPane in the * cell, it will retain its natural size, and you can set the * horizontalAlignment and verticalAlignment styles of the BoxPane to, say, * center the button within the cell. * *

Setting the fill style to true will cause the BoxPane to * completely fill the space allotted by its container in the direction * orthogonal to the layout direction. So, for a vertical layout, the * width will be the width of its container and the children of the BoxPane * will also be sized accordingly (i.e., full width of the space). And so * for a horizontal layout, with fill set to true the height * of the BoxPane will be the height allotted by its container and the * children of the BoxPane will have their heights set accordingly. */ public class BoxPane extends Container { private static class BoxPaneListenerList extends WTKListenerList implements BoxPaneListener { @Override public void orientationChanged(BoxPane boxPane) { for (BoxPaneListener listener : this) { listener.orientationChanged(boxPane); } } } private Orientation orientation = null; private BoxPaneListenerList boxPaneListeners = new BoxPaneListenerList(); public BoxPane() { this(Orientation.HORIZONTAL); } public BoxPane(Orientation orientation) { setOrientation(orientation); installSkin(BoxPane.class); } public Orientation getOrientation() { return orientation; } public void setOrientation(Orientation orientation) { if (orientation == null) { throw new IllegalArgumentException(); } if (this.orientation != orientation) { this.orientation = orientation; boxPaneListeners.orientationChanged(this); } } public ListenerList getBoxPaneListeners() { return boxPaneListeners; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy