Я пытаюсь создать программу, которая рисует круг в центре JFrame и рисует круг с помощью paintComponent. Моя цель состоит в том, чтобы окружность была сосредоточена в кадре, даже если размер JFrame изменен. Я пытался и искал разные вещи, но ничего не сработало, но я предполагаю, что я должен использовать repaint() и таймеры, но не знаю, как именно. Мой код ниже.Сохранение круга по центру при изменении размера рамки
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImageFrame extends JFrame {
private static final long serialVersionUID = 1L;
int width = 40;
int height = 40;
int x;
int y;
JPanel panel = new JPanel() {
private static final long serialVersionUID = 2L;
public void paintComponent(Graphics g) {
super.paintComponents(g);
g.drawOval(x, y, width, height);
}
};
public ImageFrame() {
add(panel);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 300);
x = (getWidth()/2) - (width/2)-20;
y = (getHeight()/2) - (height/2)-40;
setLocationRelativeTo(null);
setVisible(true);
}
}
Update
Я добавил метод TrashGod, но он говорит, чтобы удалить @Override, а затем, если RAN, фрейм открывается, но без круга. Код ниже, и я отредактировал paintComponent из моего старого кода.
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 ImageFrame extends JFrame implements {
private static final long serialVersionUID = 1L;
public ImageFrame() {
addMouseListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
setVisible(true);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Dimension size = this.getSize();
int d = 200;
int x = (size.width - d)/2;
int y = (size.height - d)/2;
g.fillOval(x, y, d, d);
g.setColor(Color.blue);
g.drawOval(x, y, d, d);
}
Этот [пример] (http://stackoverflow.com/a/3538279/230513) центров круг и регулирует размер, чтобы меньшего размера, но вы можете сделать константу 'd'. – trashgod
Знаете ли вы что-нибудь о том, чтобы держать круг по центру, если размер рамки изменяется? Это похоже на легкую задачу, но я не знаю, как это сделать. – LAD
Я разработал [ниже] (http://stackoverflow.com/a/38780788/230513). – trashgod