Changing the labels side (simply apply RTL orientation):
public static void main ( String[] args )
{
try
{
UIManager.setLookAndFeel ( new NimbusLookAndFeel () );
}
catch ( UnsupportedLookAndFeelException e )
{
e.printStackTrace ();
}
JFrame frame = new JFrame ();
JSlider slider = new JSlider ( SwingConstants.VERTICAL );
slider.setPaintLabels ( true );
slider.setComponentOrientation ( ComponentOrientation.RIGHT_TO_LEFT );
Hashtable<Integer, JLabel> table = new Hashtable<Integer, JLabel> ();
table.put ( 0, new JLabel ( "May 2, 2000" ) );
table.put ( 25, new JLabel ( "May 3, 2001" ) );
table.put ( 50, new JLabel ( "May 4, 2002" ) );
table.put ( 75, new JLabel ( "May 5, 2003" ) );
table.put ( 100, new JLabel ( "May 6, 2004" ) );
slider.setLabelTable ( table );
frame.add ( slider );
frame.pack ();
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );
}
Result:
To vary labels placement you will have to modify them manually.
This can be done for example this way:
public static void main ( String[] args )
{
try
{
UIManager.setLookAndFeel ( new NimbusLookAndFeel () );
}
catch ( UnsupportedLookAndFeelException e )
{
e.printStackTrace ();
}
JFrame frame = new JFrame ();
frame.getRootPane ().setBorder ( BorderFactory.createEmptyBorder ( 5, 5, 5, 5 ) );
JSlider slider = new JSlider ( SwingConstants.HORIZONTAL );
slider.setPaintLabels ( true );
Hashtable<Integer, JLabel> table = new Hashtable<Integer, JLabel> ();
table.put ( 0, new JLabel ( "May 2, 2000" ) );
JLabel l2 = new JLabel ( "May 3, 2001" );
l2.setBorder ( BorderFactory.createEmptyBorder ( 20, 0, 0, 0 ) );
table.put ( 25, l2 );
table.put ( 50, new JLabel ( "May 4, 2002" ) );
JLabel l3 = new JLabel ( "May 5, 2003" );
l3.setBorder ( BorderFactory.createEmptyBorder ( 20, 0, 0, 0 ) );
table.put ( 75, l3 );
table.put ( 100, new JLabel ( "May 6, 2004" ) );
slider.setLabelTable ( table );
frame.add ( slider );
frame.pack ();
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );
}
Result:
Ofcourse you could improve that code and add the border according to previous label preferred height (taken from preferred size) in your labels creation cycle each even run.
JFrame
, withJSlider
and with hardcoded value forJSlider
– Mix