/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * ScrollableFlowPanel.java * * Created on 23. Mai 2007, 16:57 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package de.cismet.cids.tools.metaobjectrenderer; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Rectangle; import javax.swing.JPanel; import javax.swing.Scrollable; import javax.swing.SwingConstants; /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ public class ScrollableFlowPanel extends JPanel implements Scrollable { //~ Methods ---------------------------------------------------------------- @Override public void setBounds(final int x, final int y, final int width, final int height) { super.setBounds(x, y, getParent().getWidth(), height); } @Override public Dimension getPreferredSize() { return new Dimension(getWidth(), getPreferredHeight()); } @Override public Dimension getPreferredScrollableViewportSize() { return super.getPreferredSize(); } @Override public int getScrollableUnitIncrement(final Rectangle visibleRect, final int orientation, final int direction) { final int hundredth = ((orientation == SwingConstants.VERTICAL) ? getParent().getHeight() : getParent().getWidth()) / 100; return ((hundredth == 0) ? 1 : hundredth); } @Override public int getScrollableBlockIncrement(final Rectangle visibleRect, final int orientation, final int direction) { return (orientation == SwingConstants.VERTICAL) ? getParent().getHeight() : getParent().getWidth(); } @Override public boolean getScrollableTracksViewportWidth() { return true; } @Override public boolean getScrollableTracksViewportHeight() { return false; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ private int getPreferredHeight() { int rv = 0; for (int k = 0, count = getComponentCount(); k < count; k++) { final Component comp = getComponent(k); final Rectangle r = comp.getBounds(); final int height = r.y + r.height; if (height > rv) { rv = height; } } rv += ((FlowLayout)getLayout()).getVgap(); return rv; } }