效果
题目
**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需要移动。
其他的都是格式化的内容,熟悉写法即可。