По стечению обстоятельств мне просто нужно было это для моего собственного приложения, я прошел через ваш вопрос, который мне не очень помог, и затем я пришел к тому, что увидел, что люди используют Graphics2D.
Я действительно всегда выгляжув Graphics g как 100-головое чудовище, которое хочет убить всю мою семью, но я решил противостоять своим страхам, получил код, который сделал треугольник, и сумел сделать из него круг.
Это намного проще, чем я когда-либо думал:
public class CustomSlider extends JSlider{
public CustomSlider(int begin, int end) {
super(begin, end);
setFont(new CustomFont(10));
setPaintTrack(true);
setUI(new BasicSliderUI(this) {
/*Sets the size of the Handler, should be the same as the OVAL size*/
@Override
protected Dimension getThumbSize() {
return new Dimension(25,25);
}
/*Painting the THUMB as a OVAL in the x and y positions of thumbRect (The Handle)*/
@Override
public void paintThumb(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
Rectangle t = thumbRect;
g2d.setColor(Color.BLUE);
g2d.fillOval(t.x, t.y, 25, 25);
}
});
/* Set JLabels for specific Values*/
Hashtable<Integer, JLabel> position = new Hashtable<Integer, JLabel>();
position.put(0, new JLabel("HELP"));
position.put(1, new JLabel("NORMAL"));
position.put(2, new JLabel("CHAOS"));
setLabelTable(position);
setPaintLabels(true);
}
Результат: https://i.stack.imgur.com/0OiKL.png (Невозможно добавить изображения, отсутствие репутации:() Если вы предпочитаете внешний вид MetalSliderUI, используйте его вместо BasicSliderUI.