package net.bettyluke.util.swing;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Rectangle;
import javax.swing.JPanel;
import javax.swing.Scrollable;
public class VerticallyScrollingPanel<T extends Component & Scrollable> extends JPanel
implements Scrollable {
public static <T extends Component & Scrollable> VerticallyScrollingPanel<T> create(T d) {
return new VerticallyScrollingPanel<>(d);
}
private VerticallyScrollingPanel(T delegate) {
super(new BorderLayout());
add(delegate);
}
@Override
public Dimension getPreferredScrollableViewportSize() {
return getDelegate().getPreferredScrollableViewportSize();
}
@Override
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
return getDelegate().getScrollableUnitIncrement(visibleRect, orientation, direction);
}
@Override
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
return getDelegate().getScrollableBlockIncrement(visibleRect, orientation, direction);
}
@Override
public boolean getScrollableTracksViewportWidth() {
return true;
}
@Override
public boolean getScrollableTracksViewportHeight() {
return false;
}
@Override
public BorderLayout getLayout() {
return (BorderLayout) super.getLayout();
}
@SuppressWarnings("unchecked")
T getDelegate() {
return (T) getLayout().getLayoutComponent(this, BorderLayout.CENTER);
}
}