2013-11-29 2 views
0

I`ve настроены в JSlider перед немного проблемноКак удалить границе JSlider

После изменения значения, на мой обычай JSlider является приграничным показано на рисунке. Извините, я сделал фотографии, но мне не разрешили публиковать их. Не настроенный jSlider не показывает такую ​​границу после щелчка по ней.

Есть ли способ, который я должен переопределить, чтобы избавиться от этой границы? Заранее спасибо!

Извините за мой английский! Надеюсь, кто-нибудь может мне помочь! Это мой Заказной интерфейс:

public class RedGreenSliderUI extends BasicSliderUI{ 
    Image knobImage ; 
    private BasicStroke stroke = new BasicStroke(1f, BasicStroke.CAP_ROUND, 
      BasicStroke.JOIN_ROUND, 0f, new float[]{1f, 2f}, 0f); 
    private static final float[] fractions = {0.0f, 0.5f}; 
    private static final Color[] fillColors = { 
    /* new Color(0x2687AE),*/ 
    /* new Color(0x1658AE)*/ 
     new Color(0xc8041b), 
     new Color(0xc8041b) 
    }; 
    private static final Color[] backColors = { 
    new Color(0x04c814), 
    new Color(0x04c814) 
    }; 

    private static final Paint hFillGradient = new LinearGradientPaint(0, 0, 0, 11, 
      fractions, fillColors, MultipleGradientPaint.CycleMethod.NO_CYCLE); 
    private static final Paint hBackGradient = new LinearGradientPaint(0, 0, 0, 11, 
      fractions, backColors, MultipleGradientPaint.CycleMethod.NO_CYCLE); 
    private static final Paint vFillGradient = new LinearGradientPaint(0, 0, 11, 0, 
      fractions, fillColors, MultipleGradientPaint.CycleMethod.NO_CYCLE); 
    private static final Paint vBackGradient = new LinearGradientPaint(0, 0, 11, 0, 
      fractions, backColors, MultipleGradientPaint.CycleMethod.NO_CYCLE); 
    private static final Stroke roundEndStroke = new BasicStroke(5, 
      BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND); 

     public RedGreenSliderUI(JSlider aSlider) { 

      super(aSlider); 

      try { 

       this.knobImage = ImageIO.read(getClass().getResource("ringelblumensalbe-    Updater-Grafiken/tongThumb01.png")); //.getClassLoader() 


      } catch (IOException e) { 

       e.printStackTrace(); 
      } 
     } 
     public void paintThumb(Graphics g) {   

      g.drawImage(this.knobImage, thumbRect.x, thumbRect.y, 15, 30, null); 

     } 
     @Override 
    protected Dimension getThumbSize() { 
     return new Dimension(15, 30); 
    } 

     @Override 
    protected Color getHighlightColor() { 
      return new Color(98, 94, 0); 
     } 

      public void paintTrack(Graphics g) { 
    Graphics2D g2 = (Graphics2D) g; 
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,   RenderingHints.VALUE_ANTIALIAS_ON); 

    if (slider.getOrientation() == JSlider.HORIZONTAL) { 
     int cy = (trackRect.height/2) - 2; 
     g.translate(trackRect.x, trackRect.y + cy); 

     g2.setStroke(roundEndStroke); 
     g2.setPaint(hBackGradient); 
     g2.drawLine(thumbRect.x, 2, trackRect.width, 2); 
     g2.setPaint(hFillGradient); 
     g2.drawLine(0, 2, thumbRect.x, 2); 

     g.translate(-trackRect.x, -(trackRect.y + cy)); 
    } else { 
     int cx = (trackRect.width/2) - 2; 
     g.translate(trackRect.x + cx, trackRect.y); 

     g2.setStroke(roundEndStroke); 
     g2.setPaint(vBackGradient); 
     g2.drawLine(2, 0, 2, thumbRect.y); 
     g2.setPaint(vFillGradient); 
     g2.drawLine(2, thumbRect.y, 2, trackRect.height); 

     g.translate(-(trackRect.x + cx), -trackRect.y); 
    } 
    } 

EDIT: I`ve получил. Ответ заключается в том, чтобы переопределить getFocusColor().

@Override 
    protected Color getFocusColor(){ 
     return new Color(255,255,255); 
    } 
+1

[например] (http://stackoverflow.com/a/12297384/714968) по @Mikle Гарина – mKorbel

ответ

0

Вы можете использовать границу: 0px; свойство для определенного класса, где отображается граница.

+0

Граница отображается только тогда, когда JSlider щелкают, линия маленьких точек ... Похоже, которая появляется после нажатия ссылки в вашем браузере. –

+0

Интересно, что маленькие точки рисуются с использованием 'BasicGraphicsUtils.drawDashedRect()'. – trashgod

5

Прямоугольник фокусировки визуализируется делегатом пользовательского интерфейса слайдера, как правило, на основе BasicSliderUI. Несмотря на то, что я не могу выступать побеждая индикатор фокусировки, вы можете попробовать одно из следующих действий:

  • Используйте UIManager установить "Slider.focus" цвет, чтобы соответствовать "Slider.background".

  • Переопределить paintFocus() метод ничего не делать; показан соответствующий пример here.

+0

Я знаю, что прошло какое-то время с тех пор, как вы написали этот ответ, но переопределение paintFocus() сделал трюк для меня. – mttdbrd

+1

@mttdbrd: Отзывы приветствуются! – trashgod

1

Ответ Trashgod работает красиво. Для noob вроде меня синтаксис;

UIManager.put("Slider.focus", UIManager.get("Slider.background")); 
Смежные вопросы