JSlider の paintTrack と paintThumb メソッドをオーバーライドした後、サムをドラッグすると遅延します。
トラックとサムを画像に置き換えました。問題を解決する方法はありますか?
public class test {
private static JFrame frame;
private static JSlider slider;
public static void main(String[] args) throws IOException {
frame = new JFrame();
slider = new JSlider();
slider.setUI(new MySliderUI(slider));
frame.add(slider);
frame.setVisible(true);
frame.pack();
frame.setSize(1200, 720);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private static class MySliderUI extends BasicSliderUI {
private BufferedImage imgTrack;
private BufferedImage imgThumb;
public MySliderUI(JSlider slider) throws IOException {
super(slider);
imgTrack = ImageIO.read(new File("icon/track.png"));
imgThumb = ImageIO.read(new File("icon/thumb.png"));
}
@Override
public void paintTrack(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
Rectangle t = trackRect;
g2d.drawImage(imgTrack, t.x, t.y, t.width, t.height, null);
}
@Override
public void paintThumb(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_OFF);
Rectangle t = thumbRect;
g2d.drawImage(imgThumb, t.x, t.y, null);
}
}
}
編集:解決しました。 getThumbSize() もオーバーライドする必要がありました
@Override
protected Dimension getThumbSize() {
return new Dimension(imgThumb.getWidth(), imgThumb.getHeight());
}