Не изменяйте размеры компонентов внутри компонента PaintComponent . Фактически, не создавайте объекты и не делайте программную логику в этом методе. Метод должен быть бережливым, максимально быстрым, рисовать и вот и все . Вы должны понимать, что у вас нет полного контроля над тем, когда или даже вызывается этот метод, и вы определенно не хотите добавлять в него код без необходимости, что может замедлить его.
Вы должны создать свой эллипс в конструкторе класса. Чтобы изменить его размер в соответствии с размером JComponent и при изменении размера, используйте ComponentListener .:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import javax.swing.JComponent;
public class EllipseComponent extends JComponent {
Ellipse2D ellipse = null;
public EllipseComponent {
ellipse = new Ellipse2D.Double(0,0,150,200);
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
// set the size of your ellipse here
// based on the component's width and height
}
});
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.draw(ellipse);
g2.setColor(Color.red);
g2.fill(ellipse);
}
}
Предостережение: код не запущен и не проверен