Swing/UpdateSliderLabel のバックアップソース(No.4)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/UpdateSliderLabel へ行く。
--- category: swing folder: UpdateSliderLabel title: JSliderの数値テキストラベルを更新する tags: [JSlider, JLabel] author: aterai pubdate: 2015-02-23T00:36:42+09:00 description: JSliderの数値テキストラベルの値を変更した場合、その位置やサイズが正しく描画されるように更新を行うメソッドを実行します。 image: https://lh5.googleusercontent.com/-xP4QgpDpRec/VOn2C7a0GLI/AAAAAAAANxQ/HQ3F4rVgoUI/s800/UpdateSliderLabel.png --- * 概要 [#summary] `JSlider`の数値テキストラベルの値を変更した場合、その位置やサイズが正しく描画されるように更新を行うメソッドを実行します。 #download(https://lh5.googleusercontent.com/-xP4QgpDpRec/VOn2C7a0GLI/AAAAAAAANxQ/HQ3F4rVgoUI/s800/UpdateSliderLabel.png) * サンプルコード [#sourcecode] #code(link){{ JSlider slider = new JSlider(0, 10000); slider.putClientProperty("Slider.paintThumbArrowShape", Boolean.TRUE); slider.setMajorTickSpacing(2500); slider.setMinorTickSpacing(500); slider.setPaintLabels(true); slider.setPaintTicks(true); slider.setSnapToTicks(true); //slider.setBorder(BorderFactory.createLineBorder(Color.WHITE, 10)); Dictionary labelTable = slider.getLabelTable(); Enumeration ed = labelTable.keys(); while (ed.hasMoreElements()) { Integer i = (Integer) ed.nextElement(); JLabel label = (JLabel) labelTable.get(i); label.setText(String.valueOf(i / 100)); } slider.setLabelTable(labelTable); }} * 解説 [#explanation] - `Default` -- 最小`0`、最大`10000`で作成した`JSlider`のラベルを、その`1/100`で表示 -- 各ラベルの文字数が変更されても、その幅が更新されないので、目盛り中央に数字(文字列)が配置されない -- `NimbusLookAndFeel`などで、最大値の`100`が見切れて、`10`までしか表示されない - `JSlider#updateLabelUIs()` -- `1/100`に変更後、`JSlider#updateLabelUIs()`を実行して、ラベルを更新する -- `JSlider#updateLabelUIs()`は、`protected`なので、内部でこれを呼び出している`JSlider#setLabelTable(...)`を実行する -- `JSlider#updateUI()`内でも`JSlider#updateLabelUIs()`を呼び出しているので、代わりに`SwingUtilities.updateComponentTreeUI(slider);`を実行しても可 * 参考リンク [#reference] - [https://stackoverflow.com/questions/28491041/jslider-is-drawn-incomplete-working-with-netbeans java - JSlider is drawn incomplete, Working with Netbeans - Stack Overflow] * コメント [#comment] #comment #comment