import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractListModel; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UIManager.LookAndFeelInfo; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class TestThumb { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new TestThumb().startUi(); } }); } private class MyListModel extends AbstractListModel { private static final long serialVersionUID = -3791947364926818808L; private int size = 10; public void setSize(int newSize) { if (size != newSize) { int oldSize = size; size = newSize; fireContentsChanged(this, oldSize, newSize); } } @Override public int getSize() { return size; } @Override public String getElementAt(int index) { return "List Element #" + index; } } public void startUi() { try { for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (Exception e) { System.err.println("Couldn't set UI to Nimbus: " + e); return; } JFrame frame = new JFrame("Test Scrollbar Thumb"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel content = new JPanel(new BorderLayout()); JPanel hdrPanel = new JPanel(); hdrPanel.add(new JLabel("JRE Version " + System.getProperty("java.version"))); content.add(hdrPanel, BorderLayout.NORTH); final MyListModel listModel = new MyListModel(); final JList list = new JList(listModel); JScrollPane scrollPane = new JScrollPane(list); content.add(scrollPane, BorderLayout.CENTER); final JSpinner spinner = new JSpinner(new SpinnerNumberModel(10, 0, 10000, 10)); spinner.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { Object val = spinner.getValue(); if (val instanceof Number) { Number num = (Number) val; listModel.setSize(num.intValue()); } } }); final JCheckBox wrap = new JCheckBox("Wrap"); wrap.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { list.setLayoutOrientation(wrap.isSelected() ? JList.VERTICAL_WRAP : JList.VERTICAL); } }); JPanel buttonPanel = new JPanel(); buttonPanel.add(new JLabel("Items:")); buttonPanel.add(spinner); buttonPanel.add(wrap); content.add(buttonPanel, BorderLayout.SOUTH); frame.setContentPane(content); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }