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