/* Copyright (C) 2000  Free Software Foundation

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

package java.awt.peer;

public interface ScrollbarPeer extends ComponentPeer
{
  void setLineIncrement(int increment);
  void setPageIncrement(int increment);
  void setValues(int value, int visible, int minimum, int maximum);
}
