• title: JSliderの目盛りをアイコンに変更する tags: [JSlider, Icon, JLabel] author: aterai pubdate: 2010-05-24T15:00:41+09:00 description: JSliderの目盛りをアイコンで描画します。

概要

JSliderの目盛りをアイコンで描画します。

サンプルコード

JSlider slider = new JSlider(0,100);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(5);
slider.setPaintLabels(true);
slider.setSnapToTicks(true);
Dictionary dictionary = slider.getLabelTable();
if(dictionary != null) {
    Enumeration elements = dictionary.elements();
    Icon tick = new TickIcon();
    while(elements.hasMoreElements()) {
        JLabel label = (JLabel) elements.nextElement();
        label.setBorder(BorderFactory.createEmptyBorder(1,0,0,0));
        label.setIcon(tick);
        label.setIconTextGap(0);
        label.setVerticalAlignment(SwingConstants.TOP);
        label.setVerticalTextPosition(SwingConstants.BOTTOM);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setHorizontalTextPosition(SwingConstants.CENTER);
        label.setForeground(Color.RED);
    }
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JSliderのラベル(JLabel)をJSlider#getLabelTable()メソッドで取得し、このラベルに三角形のアイコンを追加して、目盛り(MajorTick)の代わりとして表示しています。

  • 注: JSlider#setOrientation(SwingConstants.VERTICAL)には未対応

参考リンク

コメント