I need a scroll bar with scroll bars visible only during scroll events or, if necessary, for pulling. Something like scrollbars on modern smartphones.
I searched a lot, but found only implementations in javascript. So I tried it myself.
Is there a better solution or hints?
Animation classes can be found here: TimingFrameWork
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLayeredPane; import javax.swing.JPanel; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingUtilities; import javax.swing.Timer; import javax.swing.plaf.ScrollBarUI; import javax.swing.plaf.basic.BasicScrollBarUI; import org.jdesktop.animation.timing.Animator; import org.jdesktop.animation.timing.interpolation.KeyFrames; import org.jdesktop.animation.timing.interpolation.KeyTimes; import org.jdesktop.animation.timing.interpolation.KeyValues; import org.jdesktop.animation.timing.interpolation.PropertySetter; public class JScrollIndicator extends JLayeredPane { private static final Color THUMB_COLOR = Color.DARK_GRAY; private static final Color THUMB_BORDER_COLOR = Color.LIGHT_GRAY; private static final float MAX_ALPHA = 0.8f; private static final int THUMB_THICKNESS = 7; private static final int THUMB_MIN_SIZE = 48; private static final int THUMB_MARGIN = 3; private static final int FADE_IN_TIME = 300; private static final int STAY_TIME = 2000; private static final int FADE_OUT_TIME = 1000; private final JScrollPane scrollPane; private final ControlPanel controlPanel; public JScrollIndicator(final JComponent view) { this(view, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); } public JScrollIndicator(final JComponent view, int vsbPolicy, int hsbPolicy) { scrollPane = new JScrollPane(view, vsbPolicy, hsbPolicy); scrollPane.setBorder(BorderFactory.createEmptyBorder()); add(scrollPane, JLayeredPane.DEFAULT_LAYER); controlPanel = new ControlPanel(scrollPane); add(controlPanel, JLayeredPane.PALETTE_LAYER); addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) {
source share