【发布时间】:2020-02-04 20:23:17
【问题描述】:
我必须实现一个大小为 500 x 500 像素的 JFrame,它应该有一个 9 x 9 的圆形“场”,但正如您在图片中看到的第一行椭圆形和第二行之间的距离椭圆的个数不相等。
直径应该是 20 像素,一个椭圆的中心到另一个椭圆的距离应该是 40 像素,但我不知道我这样做是否正确:
import javax.swing.JFrame;
import java.awt.Graphics;
import java.awt.Color;
public class KreisFrame extends JFrame {
public KreisFrame() {
//Set JFrame size
setSize(500,500);
//Make JFrame visible
setVisible(true);
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.GREEN);
g.fillRect(0, 0, 500, 500);
for (int j = 0; j < 500; j += 60){
for (int i = 0; i < 500; i += 60) {
// draw circle
g.drawOval(i, 20, 20, 20);
g.drawOval(i, j, 20, 20);
// fill circle
g.fillOval(i, 20, 20, 20);
g.fillOval(i, j, 20, 20);
g.setColor(Color.BLUE);
}
}
}
public static void main(String[]args) {
KreisFrame myframe = new KreisFrame();
}
}
谁能告诉我我做错了什么?
【问题讨论】:
-
首先,请覆盖
paintComponent()而不是paint(): docs.oracle.com/javase/tutorial/uiswing/painting/closer.html -
另外请检查您的要求:偏移 60 像素的 9x9 圆网格需要 560 像素,而不是 500 像素,否则将不适合。我认为您的问题与此有关。你必须把最后一行挤进去。
-
或者... 40 像素在中心上的距离意味着圆圈应该偏移 40 像素,而不是 60。
-
@markspace 两者都试过了,但似乎都没有解决...
-
g.drawOval(i, 20, 20, 20);和g.fillOval(i, 20, 20, 20);这些行是干什么用的? drawOval(int x, int y, int width, int height) 方法表明,每次通过内循环,您都会在 y=20 处创建一个椭圆。
标签: java swing jframe pixel oval