现在我生成了一个0~254的JSlider,我想将它的0~100的滑道变为红色,提示用户这个区间无效,这个怎么实现,
还有一个问题,怎么对JSlider进行缩放,setBounds只能控制它显示区域的大小,并没有缩放

解决方案 »

  1.   

    JSlider
    public JSlider(int min,
                   int max)
    Creates a horizontal slider using the specified min and max with an initial value equal to the average of the min plus max. 使用这个构造参数来避开0-100我觉得比较可行,修改颜色估计要去修改Lookandfell,比较麻烦,至于缩放的话,如果布局正确的话,会自动缩放的
      

  2.   

    1、如果0~100不会被使用,就不从0开始构造就可以了。2、如果需要,重写 SliderUI 实现。(如果需要的话,可以给你部分源码)3、不要使用setBounds函数设置绝对位置,设置相应的Layout,并且添加到相应的位置,由Layout控制界面进行缩放。
       但是每个组件都会有最小的Size限制,缩到一定程度之后就不能正常全部显示了
      

  3.   

    gongfuliang 给我个重写SliderUI的实现吧,谢了,[email protected]
      

  4.   

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import java.awt.RenderingHints;import javax.swing.Box;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JSlider;
    import javax.swing.WindowConstants;
    import javax.swing.plaf.basic.BasicSliderUI;/**
     * @author gongfl
     */
    public class ExampleSlider extends JPanel {
    private static final long serialVersionUID = 1L; public ExampleSlider() {
    JSlider slider = new JSlider(0, 100, 0);
    slider.setUI(new MySliderUI(slider));
    slider.setMajorTickSpacing(10);
    slider.setMinorTickSpacing(5);
    slider.setPaintTicks(true);
    slider.setPaintLabels(true); Box box = Box.createVerticalBox();
    box.add(Box.createVerticalStrut(5));
    box.add(slider);
    box.add(Box.createVerticalGlue());
    add(box, BorderLayout.CENTER);
    add(Box.createHorizontalStrut(5), BorderLayout.WEST);
    add(Box.createHorizontalStrut(5), BorderLayout.EAST);
    setPreferredSize(new Dimension(240, 100));
    } public static void main(String[] args) {
    JFrame frame = new JFrame("Slider");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.getContentPane().add(new ExampleSlider());
    frame.setResizable(false);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }
    }class MySliderUI extends BasicSliderUI { public MySliderUI(JSlider b) {
    super(b);
    } public void paintThumb(Graphics g) {
    super.paintThumb(g);
    } public void paintTrack(Graphics g) {
    int cy, cw;
    Rectangle trackBounds = trackRect;
    if (slider.getOrientation() == JSlider.HORIZONTAL) {
    Graphics2D g2 = (Graphics2D) g;
    cy = (trackBounds.height / 2) - 2;
    cw = trackBounds.width; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
    RenderingHints.VALUE_ANTIALIAS_ON);
    g2.translate(trackBounds.x, trackBounds.y + cy); //背景颜色
    g2.setPaint(Color.GRAY);
    g2.fillRect(0, -cy + 5, cw, cy); int trackLeft = 0;
    int trackRight = 0;
    trackRight = trackRect.width - 1; int middleOfThumb = 0;
    int fillLeft = 0;
    int fillRight = 0; // 坐标换算
    middleOfThumb = thumbRect.x + (thumbRect.width / 2);
    middleOfThumb -= trackRect.x; if (!drawInverted()) {
    fillLeft = !slider.isEnabled() ? trackLeft : trackLeft + 1;
    fillRight = middleOfThumb;
    } else {
    fillLeft = middleOfThumb;
    fillRight = !slider.isEnabled() ? trackRight - 1
    : trackRight - 2;
    }
    // 设定渐变 -滑过区域的颜色设置
    g2.setPaint(new GradientPaint(0, 0, new Color(0, 100, 100), cw, 0,
    new Color(0, 255, 100), true));
    g2.fillRect(0, -cy + 5, fillRight - fillLeft, cy); //背景颜色
    g2.setPaint(slider.getBackground());
    g2.fillRect(10, 10, cw, 5); g2.setPaint(Color.WHITE);
    g2.drawLine(0, cy, cw - 1, cy); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
    RenderingHints.VALUE_ANTIALIAS_OFF);
    g2.translate(-trackBounds.x, -(trackBounds.y + cy));
    } else {
    super.paintTrack(g);
    }
    }
    }
    请不要随意转载
      

  5.   

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import java.awt.RenderingHints;import javax.swing.Box;
    import javax.swing.JFrame;
    import javax.swing.JSlider;
    import javax.swing.WindowConstants;
    import javax.swing.plaf.basic.BasicSliderUI;/**
     * @author gongfl
     */
    public class ExampleSlider extends JFrame {
    private static final long serialVersionUID = 1L; public ExampleSlider(String str) {
    super(str);
    JSlider slider = new JSlider(0, 100, 0);
    slider.setUI(new MySliderUI(slider));
    slider.setMajorTickSpacing(10);
    slider.setMinorTickSpacing(5);
    slider.setPaintTicks(true);
    slider.setPaintLabels(true); Box box = Box.createVerticalBox();
    box.add(Box.createVerticalStrut(5));
    box.add(slider);
    box.add(Box.createVerticalGlue());
    getContentPane().add(box, BorderLayout.CENTER);
    getContentPane().add(Box.createHorizontalStrut(5), BorderLayout.WEST);
    getContentPane().add(Box.createHorizontalStrut(5), BorderLayout.EAST);
    setSize(new Dimension(240, 100));
    } public static void main(String[] args) {
    ExampleSlider frame = new ExampleSlider("Slider");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }
    }class MySliderUI extends BasicSliderUI { public MySliderUI(JSlider b) {
    super(b);
    } public void paintThumb(Graphics g) {
    super.paintThumb(g);
    } public void paintTrack(Graphics g) {
    int cy, cw;
    Rectangle trackBounds = trackRect;
    if (slider.getOrientation() == JSlider.HORIZONTAL) {
    Graphics2D g2 = (Graphics2D) g;
    cy = (trackBounds.height / 2) - 2;
    cw = trackBounds.width; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
    RenderingHints.VALUE_ANTIALIAS_ON);
    g2.translate(trackBounds.x, trackBounds.y + cy); //背景颜色
    g2.setPaint(Color.GRAY);
    g2.fillRect(0, -cy + 5, cw, cy); int trackLeft = 0;
    int trackRight = 0;
    trackRight = trackRect.width - 1; int middleOfThumb = 0;
    int fillLeft = 0;
    int fillRight = 0; // 坐标换算
    middleOfThumb = thumbRect.x + (thumbRect.width / 2);
    middleOfThumb -= trackRect.x; if (!drawInverted()) {
    fillLeft = !slider.isEnabled() ? trackLeft : trackLeft + 1;
    fillRight = middleOfThumb;
    } else {
    fillLeft = middleOfThumb;
    fillRight = !slider.isEnabled() ? trackRight - 1
    : trackRight - 2;
    }
    // 设定渐变 -滑过区域的颜色设置
    g2.setPaint(new GradientPaint(0, 0, new Color(0, 100, 100), cw, 0,
    new Color(0, 255, 100), true));
    g2.fillRect(0, -cy + 5, fillRight - fillLeft, cy); //背景颜色
    g2.setPaint(slider.getBackground());
    g2.fillRect(10, 10, cw, 5); g2.setPaint(Color.WHITE);
    g2.drawLine(0, cy, cw - 1, cy); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
    RenderingHints.VALUE_ANTIALIAS_OFF);
    g2.translate(-trackBounds.x, -(trackBounds.y + cy));
    } else {
    super.paintTrack(g);
    }
    } @Override
    protected void paintHorizontalLabel(Graphics g, int value, Component label) {
    super.paintHorizontalLabel(g, value, label);
    } @Override
    protected void paintVerticalLabel(Graphics g, int value, Component label) {
    super.paintVerticalLabel(g, value, label);
    }
    }