在Java框架的空白帧

时间:2017-10-12 00:57:23

标签: java drawing

我一直在尝试用Java创建一个10x10网格,我尝试使用drawLines函数来实现。但是,当我运行程序时,我看到的只是一个空白窗口,它不会关闭。这是我绘制网格的两个类。有人可以解释为什么这段代码不起作用吗?

import java.awt.*;

public class RandomWalk extends Canvas{

    int width, height;

    public RandomWalk(int w, int h) {
        setSize(width = w, height = h);
    }

    public void paintGrid(Graphics g) {
        width = getWidth();
        height = getHeight();
        for(int i = 0; i < 11; i++) {
            g.drawLine(i*width/10, 0, i*width/10, height);
            g.drawLine(0, i*height/10, width, i*height/10);
        }
    }
}

import java.awt.*;

public class GridViewer extends Frame{

    GridViewer(String title, int w, int h) {
        setTitle(title);
        RandomWalk grid = new RandomWalk(w, h);
        add(grid);
    }

    public static void main(String[] args) {
        new GridViewer("Random Walk", 300, 300).setVisible(true);
    }
}

2 个答案:

答案 0 :(得分:0)

将打印输出添加到paintGrid,例如:System.out.println("paintGrid invoked");
它是否被调用过?
这可能会有所帮助:Performing Custom Painting

答案 1 :(得分:0)

您需要覆盖paint()课程中的Canvas方法才能实现目标 对于窗口关闭,您需要添加WindowListener来处置窗口(或者您只需使用javax.swing.JFrame类而不是java.awt.Frame

参考以下代码

import java.awt.*;
import java.awt.event.*;

public class RandomWalk extends Canvas {

    int width, height;

    public RandomWalk(int w, int h) {
        setSize(width = w, height = h);
    }

    @Override
    public void paint(Graphics g) {
        width = getWidth();
        height = getHeight();
        for (int i = 0; i < 11; i++) {
            g.drawLine(i * width / 10, 0, i * width / 10, height);
            g.drawLine(0, i * height / 10, width, i * height / 10);
        }
    }
}

public class GridViewer extends Frame {

    GridViewer(String title, int w, int h) {
        setTitle(title);
        setSize(w, h);
        RandomWalk grid = new RandomWalk(w, h);
        add(grid);

        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                dispose();
            }
        });
    }

    public static void main(String[] args) {
        new GridViewer("Random Walk", 300, 300).setVisible(true);
    }
}