2013-02-11 15 views
5

JSliderを使用していくつかの時系列イベントをブラウズしたいので、デフォルトの整数値の代わりにいくつかの日付が表示されるようにカスタムLabelTableを設定します。 :しかし、私はスライダーの向きを変更したい場合は、slider.setOrientation(JSlider.HORIZONTAL);を言って、ここでの結果は enter image description hereカスタムLabelTableを使用したJSliderレンダリング

JSlider slider = new JSlider(); 
... 
Date[] dates = getDates(); 
     slider.setModel(new DefaultBoundedRangeModel(0, 0, 0, dates.length - 1)); 
     Hashtable<Integer, JLabel> ht = new Hashtable<Integer, JLabel>(); 
     for (int i = 0; i < dates.length; ++i) { 
      JLabel label = new JLabel(DateFormat.getDateInstance().format(dates[i])); 
      ht.put(i, label); 
     } 
     slider.setLabelTable(ht); 
     slider.setPaintLabels(true); 
     slider.setInverted(true); 

あなたが見ることができるように、これは、正常に動作します:私のコードは次のようになりますenter image description here

他のすべての日付に、スライダの下に1つ以上の日付を表示するにはどうすればよいですか?また、垂直スライダのスライダの左側にラベルを表示できますか?

よろしく、 レミ

+0

私はこれを正しくレイアウトしていますが、JSliderを使って 'JFrame'について' 'SSCCE(http://sscce.org/)、short、runnable、compilable、' ' JSlider' – mKorbel

答えて

7

ラベル側を変更する(単にRTLの向きを適用):

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); 
} 

結果:

enter image description here

は、ラベルの配置を変更する必要があります変化することそれらを手動で これは、例えばこの方法を行うことができます。

結果
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); 
} 

enter image description here

は勿論、あなたがそのコードを改善し、以前のラベル好ましい高さに応じて境界線を追加することができます(推奨サイズから撮影)あなたのラベル作成サイクルでもそれぞれが実行されます。

+0

まさに私が探していたもの、ありがとう:) – remi

関連する問題