我检查了其他资源,但却找不到有用的东西。但是我试图弄清楚如何在0处开始循环增量而不是1来绘制椭圆内部的数字,如下所示。
我很感激帮助。
我的代码:(绘图面板:http://www.buildingjavaprograms.com/DrawingPanel.java)
// Draws boxed ovals using a for loop.
import java.awt.*;
public class DrawLoopFor
{
public static void main(String[] args)
{
DrawingPanel panel = new DrawingPanel(501, 251);
panel.setBackground(Color.CYAN);
Graphics g = panel.getGraphics();
int sizeX = 50;
int sizeY = 25;
for (int i = 0; i < 11; i++)
{
int cornerX = i*50;
int cornerY = i*25;
g.setColor(Color.WHITE);
g.fillOval(cornerX + 5, cornerY + 5, sizeX-10, sizeY-10);
g.setColor(Color.BLACK);
g.drawString("" + i, cornerX - 28, cornerY - 8);
g.setColor(Color.BLACK);
g.drawRect(cornerX, cornerY, sizeX, sizeY);
}
}
}
答案 0 :(得分:4)
您在前一个框中绘制文本而不是当前框。这就是为什么最后一个框是空的,零点是在可见屏幕之外绘制的。
最有可能的原因是你在绘制时从cornerX中减去28。
尝试添加而不是减去。
由于我没有你的DrawingPanel
课程,我无法确认你需要的确切偏移到cornerX和cornerY,但我认为你应该使用类似的东西:
g.drawString("" + i, cornerX + 22, cornerY + 17);
(22为X坐标,因为你正在绘制文本的开头3个像素在框的中间之前,25 - 3 = 22; 17为Y坐标,因为高度是25,你之前是绘制文本的基线8高于框的末尾,所以25 - 8 = 17)
答案 1 :(得分:1)
添加tempi
变量并将条件if i=0
设置为temp = 1并乘以tempi
而不是i
试试这个
for (int i = 0; i < 11; i++) {
int tempi;
if(i==0) {
tempi=1;
} else {
tempi=i
}
int cornerX = tempi*50; int cornerY = tempi*25;
}