循环JSlider?

默认情况下,JSlider采用直线形状。我们可以让JSlider像一个类似速度计的圆圈或读取圆圈吗? 如果有人做过类似这项任务的事情......请分享代码...... 谢谢     
已邀请:
JFreeChart有一个
DialPlot
可能会给你一些关于如何进行渲染的想法。     
没有默认方法可以执行此操作。但是,如果您要创建一个自定义组件,听起来您想要某种可以抓取和调整的表盘,而不是一个圆形的滑块。 这将是一个自定义组件,可以创建一个中等但有趣的任务。困难的部分将使用户看起来像可调节的东西,而不仅仅是显示一个值。在现实生活中,速度表是只读的。     
据我所知,没有内置功能可以做到这一点。但是,您可以使用此JKnob之类的类并自行添加实际滑动值。 (实际上,它有一个getValue()方法,所以只需调用它并除以pi以获得-1.0到1.0之间的值)     
巧合的是,我只是需要这个用于我自己的应用程序,我通过了你的问题并没有真正帮助我,然后我看到人们使用Graphics2D。 我总是把Graphics g视为一个想要谋杀我全家的100头怪物,但我决定面对我的恐惧,得到一个制作三角形的代码,并设法制造出一个圆圈。 它比我想象的要容易得多:
 public class CustomSlider extends JSlider{

 public CustomSlider(int begin, int end) {
     super(begin, end);
     setFont(new CustomFont(10));
     setPaintTrack(true);
    setUI(new BasicSliderUI(this) { 
        /*Sets the size of the Handler, should be the same as the OVAL size*/
        @Override
        protected Dimension getThumbSize() {
            return new Dimension(25,25);
        }

        /*Painting the THUMB as a OVAL in the x and y positions of thumbRect (The Handle)*/
        @Override
        public void paintThumb(Graphics g) {
            Graphics2D g2d = (Graphics2D) g;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            Rectangle t = thumbRect;
            g2d.setColor(Color.BLUE);
            g2d.fillOval(t.x, t.y, 25, 25);
        }
    });
    /* Set JLabels for specific Values*/
    Hashtable<Integer, JLabel> position = new Hashtable<Integer, JLabel>();
    position.put(0, new JLabel("HELP"));
    position.put(1, new JLabel("NORMAL"));
    position.put(2, new JLabel("CHAOS"));
    setLabelTable(position);
    setPaintLabels(true);
}
结果:https://i.stack.imgur.com/0OiKL.png (无法添加图片,缺乏声誉:() 如果您更喜欢MetalSliderUI的外观,请使用那个而不是BasicSliderUI。     

要回复问题请先登录注册