2012-09-06 5 views
5

私はこのウェブサイトを経由しましたChange look and feel of JSlider Slider.altTrackColorを除いて、他に何も働いていません。私はpic1に示されているような何かをしたいと思います。どんな提案も大きな助けになるでしょう。私はJDK 1.6に取り組んでいます。また、私はこれを試してみましたJSliderの外観と感じを変更

UIDefaults defaults = UIManager.getDefaults();  

     defaults.put("Slider.altTrackColor", Color.red); 
     defaults.put("Slider.thumb", Color.red); 

WindowUtilities.setNativeLookAndFeel(); 

// WindowUtilities.setNimbuzzLookAndFeel(); 

// WindowUtilities.setJavaLookAndFeel(); 

WindowUtilitiesを以前のリリースのように、ネイティブなLook&Feelを使用するようにシステムに指示するクラスです。それ以外の場合はMetal(Java)LAFがデフォルトです。ここで

public static void setNativeLookAndFeel() { 
try { 
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
} catch(Exception e) { 
    System.out.println("Error setting native LAF: " + e); 
} 

I want slider in the right image to be like left

+1

次回からは、そのことを念頭に置いておきます。 – madhur

+1

ところで、訂正していただきありがとうございます - 「WindowUtilities」とは何ですか? DYM 'SwingUtilities'?もっと早く助けを求めるには、[SSCCE](http://sscce.org/)を投稿してください。 –

+0

@AndrewThompsonそのクラス /**以前の *のように、ネイティブのルックアンドフィールを使用するようにシステムに指示します。それ以外の場合はMetal(Java)LAFがデフォルトです。 */ – madhur

答えて

10

第一の画像に示す作業UIの完全な例です:
(魔法 - グラフィックスと基本的なUIの知識を持つ仕事の少しだけ)

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.Stroke; 
import java.awt.geom.GeneralPath; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JSlider; 
import javax.swing.SwingConstants; 
import javax.swing.plaf.basic.BasicSliderUI; 

/** 
* 
* @see http://stackoverflow.com/a/12297384/714968 
*/ 
public class CustomSliderUI extends BasicSliderUI { 

    private BasicStroke stroke = new BasicStroke(1f, BasicStroke.CAP_ROUND, 
      BasicStroke.JOIN_ROUND, 0f, new float[]{1f, 2f}, 0f); 

    public CustomSliderUI(JSlider b) { 
     super(b); 
    } 

    @Override 
    public void paint(Graphics g, JComponent c) { 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
       RenderingHints.VALUE_ANTIALIAS_ON); 
     super.paint(g, c); 
    } 

    @Override 
    protected Dimension getThumbSize() { 
     return new Dimension(12, 16); 
    } 

    @Override 
    public void paintTrack(Graphics g) { 
     Graphics2D g2d = (Graphics2D) g; 
     Stroke old = g2d.getStroke(); 
     g2d.setStroke(stroke); 
     g2d.setPaint(Color.BLACK); 
     if (slider.getOrientation() == SwingConstants.HORIZONTAL) { 
      g2d.drawLine(trackRect.x, trackRect.y + trackRect.height/2, 
        trackRect.x + trackRect.width, trackRect.y + trackRect.height/2); 
     } else { 
      g2d.drawLine(trackRect.x + trackRect.width/2, trackRect.y, 
        trackRect.x + trackRect.width/2, trackRect.y + trackRect.height); 
     } 
     g2d.setStroke(old); 
    } 

    @Override 
    public void paintThumb(Graphics g) { 
     Graphics2D g2d = (Graphics2D) g; 
     int x1 = thumbRect.x + 2; 
     int x2 = thumbRect.x + thumbRect.width - 2; 
     int width = thumbRect.width - 4; 
     int topY = thumbRect.y + thumbRect.height/2 - thumbRect.width/3; 
     GeneralPath shape = new GeneralPath(GeneralPath.WIND_EVEN_ODD); 
     shape.moveTo(x1, topY); 
     shape.lineTo(x2, topY); 
     shape.lineTo((x1 + x2)/2, topY + width); 
     shape.closePath(); 
     g2d.setPaint(new Color(81, 83, 186)); 
     g2d.fill(shape); 
     Stroke old = g2d.getStroke(); 
     g2d.setStroke(new BasicStroke(2f)); 
     g2d.setPaint(new Color(131, 127, 211)); 
     g2d.draw(shape); 
     g2d.setStroke(old); 
    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     JSlider slider = new JSlider(0, 100); 
     slider.setPaintTicks(true); 
     slider.setPaintLabels(true); 
     slider.setMinorTickSpacing(5); 
     slider.setMajorTickSpacing(25); 
     slider.setUI(new CustomSliderUI(slider)); 
     frame.add(slider); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

返された範囲を変更することによって、サム(グリッパ)のサイズを簡単に変更できます。親指の絵はどんなサイズにも適応します。また、他のスライダパーツのペイントも簡単にカスタマイズできます。ここで

は仕方によって、最終的な図である。

enter image description here

P.S.私は、垂直スライダーのUIを調整していませんでしたが、それはあまりにも長くかかるべきではありません。

関連する問題