【问题标题】:Change displayable labels for a JSlider?更改 JSlider 的可显示标签?
【发布时间】:2009-07-14 14:06:42
【问题描述】:

我有一个 JSlider,最小值为 0,最大值为 10,000。我将主要刻度线设置为 1,000。如果我现在绘制标签,它们将显示为 0、1000、2000、3000、4000 等。我希望显示的是 0、1、2、3、4、5 等。是完成这项任务的好方法吗?

【问题讨论】:

    标签: java swing division jslider


    【解决方案1】:

    使用JSlider.setLabelTable(Dictionary)

    编辑

    或者,您可以依赖预定义的标签 UI,只需更改标签文本:

        Enumeration e = jSlider.getLabelTable().keys();
    
        while (e.hasMoreElements()) {
            Integer i = (Integer) e.nextElement();
            JLabel label = (JLabel) jSlider.getLabelTable().get(i);
            label.setText(String.valueOf(i / 1000));          
        }
    

    【讨论】:

      【解决方案2】:

      您可以使用JSlider.setLabelTable(Dictionary) 为您希望以不同方式呈现的值设置特定标签;例如

      JSlider slider = ...
      
      Dictionary dict = new Hashtable();
      for (int i=0; i<=10000; i += 1000) {  
        dict.put(i, new JLabel(Integer.toString(i / 1000)));
      }
      
      slider.setLabelTable(dict);
      

      (根据以前的 cmets 编辑。)

      【讨论】:

      • Dictionary 是一个抽象类,因此您可能希望使用 Hashtable 代替。您还需要在其中获得数字 10。你的 for 循环不允许这样做。
      • 字典是抽象的,不能实例化
      • 从头开始重建标签可能是个坏主意(在 Windows 上使用 Java6 会损坏标签)
      • 他们是怎么破的?我在 Windows 上使用 Alloy L&F,而 JLabels 似乎还可以。从头开始重建 JLabel 的替代方法是什么?
      • 检查我的答案(我在带有 jdk 1.6u14 的 Windows 7 上)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多