2010-10-26 42 views
1

我需要定制jslider在swing中的外观和感觉。 我有一个jslider旋钮的图像。我需要把这个旋钮的图像放在我们用来从给定范围内选择一个值的jslider旋钮上。 我不想使用jslider的默认旋钮图像。相反,我想把自己的旋钮的图像放在它上面。如何把图像放在jslilder的swing中的旋钮在java中?

请帮我,我该怎么做?

感谢 乔蒂

+0

OP后来的问题是更好地问:http://stackoverflow.com/questions/4021191/how-to-hide-the -knob-jslider – 2010-10-26 14:13:22

回答

2

对不起,错误的做法。尝试是这样的:

package java_sandbox; 

import javax.imageio.ImageIO; 
import javax.swing.JSlider; 
import javax.swing.SwingUtilities; 
import javax.swing.JFrame; 
import javax.swing.plaf.basic.BasicSliderUI; 

import java.awt.*; 

import java.io.File; 
import java.io.IOException; 


public class CustomSliderKnob { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new CustomSliderKnob(); 
      } 
     }); 
    } 

    public CustomSliderKnob() { 

     JFrame f = new JFrame("Swing Slider Knob"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


     Container p = f.getContentPane(); 
     JSlider s = new JSlider(); 

     s.setUI(new mySliderUI(s)); 

     p.add(s); 

     f.pack(); 
     f.setVisible(true); 
    } 

    private class mySliderUI extends BasicSliderUI { 

     Image knobImage; 

     public mySliderUI(JSlider aSlider) { 

      super(aSlider); 

      try { 
       this.knobImage = ImageIO.read(new File("d:\\d.jpg")); 

      } catch (IOException e) { 

       e.printStackTrace(); 
      } 
     } 
     public void paintThumb(Graphics g) {   

      g.drawImage(this.knobImage, thumbRect.x, thumbRect.y, 8, 8, null); 

     } 

    } 

} 
2

JSlider的子类,覆盖“的paintComponent()”,并以超级的实现呼叫然后绘制图像中的适当位置。

+0

感谢您的回复。现在它显示两个旋钮。一个矿和前一个矿。而且我的图像旋钮也不动。你能告诉我该怎么做吗? – Jyoti 2010-10-26 04:45:12

+1

为了更快地获得更好的帮助,请发布当前代码的SSCCE(http://pscode.org/sscce.html)。鉴于它使用图像,无论是在网上热链接,还是在代码中生成。 – 2010-10-26 06:09:41

0

大家好,

非常感谢您的答复。我为我的问题得到了解决方案。它非常简单。

我做了这样的事情:

Icon icon = new ImageIcon("slider.png"); 
     UIDefaults defaults = UIManager.getDefaults(); 
     defaults.put("Slider.horizontalThumbIcon", icon); 

感谢 乔蒂