2012-09-06 38 views
5

Tôi đã xem qua trang web này Change look and feel of JSlider nhưng ngoại trừ Slider.altTrackColor không có gì khác đang hoạt động. Tôi muốn làm một cái gì đó như thể hiện trong pic1 bất kỳ đề nghị sẽ được giúp đỡ rất nhiều. Tôi đang làm việc trên JDK 1.6.Thay đổi giao diện JSlider

UIDefaults defaults = UIManager.getDefaults();  

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

Tôi cũng đã cố gắng này:

WindowUtilities.setNativeLookAndFeel(); 

// WindowUtilities.setNimbuzzLookAndFeel(); 

// WindowUtilities.setJavaLookAndFeel(); 

WindowUtilities là lớp cho rằng hệ thống để sử dụng cái nhìn tự nhiên và cảm thấy, như trong phiên bản trước. Kim loại (Java) LAF là mặc định khác.

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

từ lần tới tôi sẽ ghi nhớ điều đó. cảm ơn bạn đã sửa đổi – madhur

+1

BTW - 'WindowUtilities' là gì? DYM 'SwingUtilities'? Để được trợ giúp tốt hơn sớm hơn, hãy đăng một [SSCCE] (http://sscce.org/). –

+0

@AndrewThompson lớp học /** Yêu cầu hệ thống sử dụng giao diện gốc, như trong các bản phát hành * trước đó. Kim loại (Java) LAF là mặc định khác. */ – madhur

Trả lời

10

Dưới đây là một ví dụ đầy đủ các giao diện người dùng làm việc với hiển thị trên hình ảnh 1:
(không kỳ diệu - chỉ cần một chút công việc với đồ họa và kiến ​​thức UI cơ bản)

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); 
    } 
} 

Bạn có thể dễ dàng sửa đổi kích thước ngón tay cái (gripper) bằng cách thay đổi các giới hạn trả về. Bức vẽ ngón tay cái sẽ thích ứng với bất kỳ kích thước nào. Và bạn cũng có thể dễ dàng tùy chỉnh bức tranh của bất kỳ phần trượt nào khác.

Dưới đây là quan điểm chính thức bằng cách này:

enter image description here

T.B. Tôi đã không thích ứng UI cho thanh trượt dọc, nhưng điều đó không nên mất quá nhiều thời gian.

Các vấn đề liên quan