Java GUI中可调整大小的数字三角形

时间:2014-04-24 02:09:16

标签: java loops user-interface

我正在为我正在学习的Java课程做这个作业。我被指派这样做:

编写一个显示数字的程序,如下所示。当窗口调整大小时,显示中的行数会改变以适合窗口。

这是GUI中显示的内容(行之间没有大空格):

1

12

123

1234

12345

123456

1234567

随着我扩展GUI窗口,数字越大,行数越来越多。

这是我现在拥有的代码:

import javax.swing.*;
import java.awt.*;
public class ResizingGUI extends JPanel{
    public int width = 600;
    public int height = 200;
    public int x_coord = 10;
    public int y_coord = 40;
    public static final int point_size = 12;
    public Font fontObject = new Font("SansSerif", Font.PLAIN, point_size);
    public int maxLines = 16;

    public ResizingGUI (){
        super();
        setSize(width, height);
    }

    public void paint(Graphics g){
        super.paint(g);
        g.setFont(fontObject);
        x_coord = 10;
        y_coord = 40;
        int lineCount = 0;
        int line = 1;
        maxLines = (this.getHeight()-40)/10;
        while(lineCount < maxLines){
            while(line < maxLines){
                String s = String.valueOf(line);
                g.drawString(s, x_coord, y_coord);
                line++;
                x_coord = x_coord + 10;
                if(line > 10){
                    x_coord = x_coord + 5;
                }
            line = 0;
            lineCount++;
            y_coord = y_coord + 10;
            }
        }
    }


    public static void main(String[]args){
        JFrame frame = new JFrame();
        frame.setTitle("Resizeable GUI");
        frame.setSize (600,200);
        frame.getContentPane().add (new ResizingGUI());
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

我认为这可能是解决方案,但嵌套循环会让我陷入循环(哈哈) 如果有人可以请求修复嵌套循环的方法或(更有可能)如何实现我的目标,我将非常感激。

1 个答案:

答案 0 :(得分:0)

你的循环有点令人困惑,基本上,你想循环的行数和数字列的循环(这是当前的行号)......

int line = 0;
while (line < maxLines) {
    int col = 0;
    while (col < line) {
        //...
        col++;
    }
    line++;
}

您也没有将x_coord重置回原来的位置,这意味着每一条新行都会从最后一行的末尾开始......就在它的正下方。

您还应该:

  • 覆盖paintComponent而不是paint。有关详细信息,请查看Performing Custom Painting
  • 覆盖getPreferredSize而非使用setSize。它将更好地与布局管理器一起使用
  • 使用FontMetrics来确定每个行/列需要调整的像素数。有关详细信息,请查看Measuring Text