
Это мой собственный класс пользовательского интерфейса. Я перепробовал все, чтобы решить эту проблему, но безрезультатно.
public class CustomUI {
static class CustomSliderUI extends MetalSliderUI {
private final int customTrackWidth;
public CustomSliderUI(int customTrackWidth) {
super();
this.customTrackWidth = customTrackWidth;
//this.focusInsets = new Insets(0, 0, 0, 0);
//this.insetCache = new Insets(0, 0, 0, 0);
}
@Override
public void installUI(JComponent c) {
super.installUI(c);
if (this.focusInsets == null) {
this.focusInsets = new Insets(0, 0, 0, 0);
}
}
@Override
protected void calculateTrackRect() {
super.calculateTrackRect();
trackRect.width = customTrackWidth;
trackRect.x = (slider.getWidth() - customTrackWidth) / 2;
}
@Override
protected Dimension getThumbSize() {
return new Dimension(30, 30);
}
@Override
public void paintThumb(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(new Color(0xF3D39B));
int thumbWidth = 10;
int thumbHeight = 30;
int x = thumbRect.x + (thumbRect.width - thumbWidth) / 2;
int y = 0;
g2.fillRect(x, y, thumbWidth, thumbHeight);
}
@Override
public void paintTrack(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int trackHeight = 30;
trackRect.width = customTrackWidth;
// Fülle den ausgefüllten Bereich
int filledWidth = thumbRect.x - trackRect.x + (thumbRect.width / 2);
g2.setColor(new Color(0xBB7E3B));
g2.fillRect(trackRect.x, 0, filledWidth, trackHeight);
// Fülle den nicht ausgefüllten Bereich
g2.setColor(new Color(0x773A16));
g2.fillRect(trackRect.x + filledWidth, 0, trackRect.width - filledWidth, trackHeight);
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... nsets-null
Мобильная версия