statechanged que fecha event changeevent change bar automatico java swing look-and-feel jslider

java - que - Pintar el icono del control deslizante de JSlider



spinner fecha java (2)

Me gustaría volver a pintar el marcador o el pulgar del JSlider lugar del gris estándar. ¿Cómo puedo conseguir esto?


La extensión del delegado BasicSliderUI no está exenta de peligros, pero permite el control arbitrario de la representación, como se sugiere en el siguiente ejemplo.

slider.setUI(new MySliderUI(slider)); ... private static class MySliderUI extends BasicSliderUI { private static float[] fracs = {0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f}; private LinearGradientPaint p; public MySliderUI(JSlider slider) { super(slider); } @Override public void paintTrack(Graphics g) { Graphics2D g2d = (Graphics2D) g; Rectangle t = trackRect; Point2D start = new Point2D.Float(t.x, t.y); Point2D end = new Point2D.Float(t.width, t.height); Color[] colors = {Color.magenta, Color.blue, Color.cyan, Color.green, Color.yellow, Color.red}; p = new LinearGradientPaint(start, end, fracs, colors); g2d.setPaint(p); g2d.fillRect(t.x, t.y, t.width, t.height); } @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.black); int tw2 = t.width / 2; g2d.drawLine(t.x, t.y, t.x + t.width - 1, t.y); g2d.drawLine(t.x, t.y, t.x + tw2, t.y + t.height); g2d.drawLine(t.x + t.width - 1, t.y, t.x + tw2, t.y + t.height); } }


Hay tres formas:

  1. cambiar el aspecto y la sensación de Java , Preferred of Ways
  2. OverRide XxxSliderUI, pero eso sería Look and Feel sensitive, y no de manera fácil
  3. aprendiendo la sintonía de Synth

Ejemplo usando Synth

SynthSliderTest.java

import java.awt.*; import javax.swing.*; import javax.swing.plaf.synth.*; public class SynthSliderTest { private JFrame f = new JFrame(); public SynthSliderTest() { try { SynthLookAndFeel laf = new SynthLookAndFeel(); laf.load(SynthSliderTest.class.getResourceAsStream("yourPathTo/demo.xml"), SynthSliderTest.class); UIManager.setLookAndFeel(laf); } catch (Exception e) { e.printStackTrace(); } f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().add(makeUI()); f.setSize(320, 240); f.setLocationRelativeTo(null); f.setVisible(true); } public JComponent makeUI() { JSlider slider = new JSlider(0, 100); JPanel p = new JPanel(); p.add(slider); return p; } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { SynthSliderTest synthSliderTest = new SynthSliderTest(); } }); } }

archivo demo.xml

<?xml version="1.0" encoding="UTF-8"?> <synth> <style id="backingStyle"> <opaque value="TRUE"/> <font name="Dialog" size="12"/> <state> <color value="WHITE" type="BACKGROUND"/> <color value="BLACK" type="FOREGROUND"/> </state> </style> <bind style="backingStyle" type="region" key=".*"/> <style id="SliderTrackStyle"> <opaque value="TRUE"/> <state> <color type="BACKGROUND" value="ORANGE"/> </state> </style> <bind style="SliderTrackStyle" type="region" key="SliderTrack" /> <style id="SliderThumbStyle"> <opaque value="TRUE"/> <state> <color type="BACKGROUND" value="RED"/> </state> <state value="PRESSED"> <color type="BACKGROUND" value="GREEN"/> </state> <!-- state value="MOUSE_OVER"> <color type="BACKGROUND" value="BLUE"/> </state --> </style> <bind style="SliderThumbStyle" type="region" key="SliderThumb" /> </synth>