2012-09-06 57 views
5

He pasado por este sitio web Change look and feel of JSlider pero a excepción de Slider.altTrackColor nada más está funcionando. Quiero hacer algo como se muestra en la foto 1, cualquier sugerencia sería de gran ayuda. Estoy trabajando en JDK 1.6.Cambiar el aspecto JSlider

UIDefaults defaults = UIManager.getDefaults();  

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

También he intentado esto:

WindowUtilities.setNativeLookAndFeel(); 

// WindowUtilities.setNimbuzzLookAndFeel(); 

// WindowUtilities.setJavaLookAndFeel(); 

WindowUtilities es la clase que le dice al sistema que utilice aspecto nativo, como en las versiones anteriores. Metal (Java) LAF es el valor predeterminado de lo contrario.

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

de la próxima vez lo tendré en cuenta. gracias por corregir – madhur

+1

BTW - ¿Qué es un 'WindowUtilities'? DYM 'SwingUtilities'? Para una mejor ayuda antes, publique un [SSCCE] (http://sscce.org/). –

+0

@AndrewThompson es una clase /** Dile al sistema que use una apariencia nativa, como en versiones anteriores *. Metal (Java) LAF es el valor predeterminado de lo contrario. */ – madhur

Respuesta

10

Aquí es un ejemplo completo de la interfaz de usuario de trabajo que se muestra en la primera imagen:
(sin magia - sólo un poco de trabajo con gráficos y conocimientos básicos de interfaz de usuario)

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

Puede modificar fácilmente el tamaño del pulgar (pinza) cambiando los límites devueltos. La pintura del pulgar se adaptará a cualquier tamaño. Y también puede personalizar fácilmente la pintura de cualquier otra parte del control deslizante.

Aquí es la vista final por cierto:

enter image description here

P. S. No adapté la interfaz de usuario para los controles deslizantes verticales, pero eso no debería llevar demasiado tiempo.

Cuestiones relacionadas