Swing Проблема с кастомным slider ui

Добавил на один JPanel слайдер и задал ему slider.setUI(new CustomSliderUI(slider));

CustomSliderUI:

public class CustomSliderUI extends BasicSliderUI{
    public CustomSliderUI(JSlider b) {
        super(b);
        b.addChangeListener ( new ChangeListener(){
          public void stateChanged ( ChangeEvent e ){
            b.repaint ();
          }
        } );
        b.addMouseListener (new MouseAdapter()
        {
          public void mousePressed ( MouseEvent e )
          {
            b.repaint ();
            System.out.println("проверка");
          }
          public void mouseReleased ( MouseEvent e )
          {
            b.repaint ();
          }
        } );
    }
    public static ComponentUI createUI(JComponent c) {
        return new CustomSliderUI((JSlider)c);
    }
    @Override
    protected Dimension getThumbSize() {
        return new Dimension(5,5);
    }

    @Override
    public void paintTrack(Graphics g) {
        
        Image img = new ImageIcon(this.getClass().getResource("/settings/image.png")).getImage().getScaledInstance(194, 30, 0);
        
        Graphics2D g2d = (Graphics2D) g;

        Rectangle trackBounds = trackRect;
        if (slider.getOrientation() == JSlider.HORIZONTAL) {
            int upperX = thumbRect.x + (thumbRect.width / 2);
            int cellHeight = img.getHeight(null);
                    g.drawImage(img,
                                0, 0, 
                                upperX - trackBounds.x, cellHeight ,
                                
                                0, 0,
                                upperX - trackBounds.x, cellHeight+12,
                                slider);
        }   
    }
    @Override
    public void paintThumb(Graphics g) {}
}

Все работает, но как только слайдер перемещаю на другой JPanel, методы paintTrack, paintThumb перестают работать. Т.е. изначально было так: при запуске программы открывался JPanel и на нем был слайдер, все работало, потом сделал так: при запуске программы открывался первый JPanel и потом был переход на другой JPanel и на слейдер ставились изначальные настройки BasicSliderUI. Изначально я думал, что slider.setUI(new CustomSliderUI(slider)); не работал, но это не так. Убедился я в этом следующим образом: в конструктор CustomSliderUI я добавил System.out.println("проверка"); которая срабатывает при нажатии на ползунок и как оказалось эта надпись выводится в консоль, значат мой кастомный ui поставлен, а методы, которые отвечают за отрисовку не работают. Как устранить данную проблему?


Ответы (0 шт):