Я пытаюсь написать свою собственную кнопку для проекта UI passion на Java, и я хочу добавить градиент в качестве подсветки наведения на кнопку.Кнопка также должна иметь рамку, поэтому для сплошных цветов я просто использую метод fillOval, а затем метод drawOval для рисования для границы.
Это работает, как и предполагалось, для сплошных цветов, но по какой-то причине при использовании градиентной краски в правой нижней части овала отсутствуют некоторые пиксели.
Вот мои методы рисования:
@Override
public void paintComponent(Graphics g) {
g.setColor(getParent().getBackground());
g.fillRect(0,0,getWidth(),getHeight());
Graphics2D g2D = (Graphics2D)g;
if (hit){
g2D.setPaint(Color.green);
}else if(focus){
g2D.setPaint(this.createGradient());
}else{
g2D.setPaint(Color.RED);
}
this.paintButton(g2D);
this.paintBorder(g2D);
}
private void paintButton(Graphics2D g){
switch (this.shape){
case SQUARE:
g.fillRect(0,0,getWidth() - 1,getHeight() - 1);
break;
case OVAL:
g.fillOval(0,0,getWidth() -1 ,getHeight() - 1);
break;
}
}
private void paintBorder(Graphics2D g){
g.setPaint(this.borderColor);
switch (this.shape){
case OVAL:
g.drawOval(0,0,getWidth() - 1,getHeight() - 1);
break;
case SQUARE:
g.drawRect(0,0,getWidth() - 1,getHeight() - 1);
break;
}
}
private LinearGradientPaint createGradient(){
Point2D start = new Point2D.Float(0, 0);
Point2D end = new Point2D.Float(getWidth()-1, 0);
Float mousePoint = (float)mouseLocation.x / getWidth();
if(mousePoint == 0) {
mousePoint = 0.1f;
}
float[] dist = {0.0f, mousePoint, 1.0f};
Color[] colors = {Color.RED, Color.GREEN, Color.RED};
return new LinearGradientPaint(start, end, dist, colors);
}
Это изображение со сплошным цветом, и вы можете видеть, что оно красиво заполнено
Здесь вы можете увидеть внизукруг с белыми и мешающими пикселями
Это мой первый вопрос, поэтому любые комментарии / предложения по форматированию моего вопроса приветствуются.