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 поставлен, а методы, которые отвечают за отрисовку не работают. Как устранить данную проблему?