利用Graphics类做的一些习题(三)

mac2022-06-30  114

效果

题目

**15.5(用三角形式显示数字)编写程序,将数字显示成三角形式。改变窗口大小时,为了适应窗口,行数会随窗口的大小而变化。

代码

package Test; import javax.swing.*; import java.awt.*; public class Exercise15_5 extends JFrame { public Exercise15_5(){ add(new drawRectangle()); } public static void main(String[] args) { Exercise15_5 frame=new Exercise15_5(); frame.setTitle("Exercise16_9"); frame.setSize(200,400); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class drawRectangle extends JPanel{ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); int x=0; int y=20; for (int i = 1; i <=getHeight()/10; i++) { for (int j = 0; j< i; j++) { x+=20; g.drawString(""+(j+1),x,y); } x=0; y+=30; } } }

思路解析

题目要求改变窗口大小时,为了适应窗口,行数会随窗口的大小而变化

所以可以看出显示的行数是根据窗口大小来的。

for (int i = 1; i <=getHeight()/10; i++) { for (int j = 0; j< i; j++) { x+=20; g.drawString(""+(j+1),x,y); } x=0; y+=30; }

所以这里的双重循环,第一重的根据就是当前窗口的高度。这样拉大窗口显示的行数也会随之增加。

第二重循环控制每个数字之间的间距,在第二重循环,即同一行绘制数字的时候,每次绘制字符串,只需要挪动x的值 不需要移动y。

同理,在第一重循环,即绘制每一列数组的时候,x需要归零,y需要移动。

其他的都是格式化的内容,熟悉写法即可。

最新回复(0)