• category: swing folder: TriangleTickSlider title: JSliderの目盛りをアイコンに変更する tags: [JSlider, Icon, JLabel] author: aterai pubdate: 2010-05-24T15:00:41+09:00 description: JSliderの目盛りに使用するJLabelを取得し、アイコンを追加したり文字色を変更するなどの変更を行います。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTWS_t-t1I/AAAAAAAAApA/78UrJyqx8og/s800/TriangleTickSlider.png

概要

JSliderの目盛りに使用するJLabelを取得し、アイコンを追加したり文字色を変更するなどの変更を行います。

サンプルコード

JSlider slider = new JSlider(0, 100);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(5);
slider.setPaintLabels(true);
slider.setSnapToTicks(true);
slider.putClientProperty("Slider.paintThumbArrowShape", Boolean.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()メソッドで取得し、この各JLabelに三角形のアイコンを追加して目盛り(MajorTick)の代替としています。

  • 垂直JSlider(JSlider#setOrientation(SwingConstants.VERTICAL))には未対応

参考リンク

コメント