Я пытаюсь нарисовать круг в центре окна, и я не могу понять, что это правильно, должно быть очень просто! Я понимаю, что если вы установите JPanel в качестве области содержимого JFrame, макет по умолчанию - flowLayout, и этот чертеж должен начинаться с верхнего левого угла экрана как 0,0. Для того, чтобы попытаться выяснить, что происходит, я нарисовал синий фон, заполняющий JPanel, но это, кажется, есть запас, как так:Как получить JPanel для заполнения родительского JFrame
Когда окно становится меньше синий прямоугольник, рисунок начинает подрезанными с противоположной стороны:
Что происходит! Вот мой код:
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame {
public static void main(String args[])
{
Test test = new Test();
test.Start();
}
public void Start()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 500);
CirclePanel circlePanel = new CirclePanel();
this.setContentPane(circlePanel);
this.setVisible(true);
}
public class CirclePanel extends JPanel
{
private int radius = 200;
public void paintComponent(Graphics g) {
g.setColor(Color.blue);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.red);
int diameter = radius * 2;
g.fillOval(getX(), getY(), diameter, diameter);
}
public int getX()
{
return (this.getWidth()/2) - radius;
}
public int getY()
{
return (this.getHeight()/2) - radius;
}
}
}
Кроме того, я не знаю, если это важно или нет , но вы можете использовать 'Math.min (getWidth(), getHeight())', чтобы найти диаметр, который позволит овалу встраиваться в компонент при рисовании t ... – MadProgrammer
@MadProgrammer благодарит, может быть полезно в будущем! – mbdavis