Я пытаюсь нарисовать большой круг и заполнить меньший круг в центре. Вот что у меня есть до сих пор:Заполнение графикой # fillOval отключается
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(50, 75));
frame.add(new JPanel() {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.BLACK);
g2.drawOval(0, 0, 26, 26);
g2.fillOval(4, 4, 18, 18);
}
});
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Небольшой круг не правильно центрирован и выглядит странно. Однако, если я изменю g2.fillOval (4, 4, 18, 18); к g2.drawOval (4, 4, 18, 18); он выглядит правильно центрированным, но явно не заполнен. Я бы ожидал, что два метода будут рисовать овал в одном и том же положении и размере. Я не знаю, почему это происходит. Любая помощь будет оценена по достоинству.
Это будет связано с тем, как работает сглаживание и как ваши глаза «воспринимают» это ... оптическая иллюзия, другими словами – MadProgrammer
@MadProgrammer Существует ли другой вариант рендеринга, который бы работал? Я не очень разбираюсь в разных вариантах рендеринга. – Stripies
Не совсем, проблема связана с тем, что пиксели являются дробными, например, у вас не может быть половины пикселя, поэтому он пытается выполнить некоторые трюки, чтобы применить смягчение. Все, что вы можете работать на вашем ПК, вероятно, не будет работать на каком-то одном elses – MadProgrammer