2017-10-12 85 views
1

我一直在尝试在Java中创建一个10x10网格,并且我尝试使用drawLines函数来实现此目的。但是,当我运行该程序时,我所看到的只是一个空白的窗口,不会关闭。这是我的两个课程来绘制网格。有人能解释为什么这个代码不起作用吗?Java框架中的空白框架

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); 
    } 
} 

回答

0

你的U需要重写paint()方法Canvas类来实现自己的目标 和闭窗,你需要添加WindowListener处置窗口(或U可以简单地使用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); 
    } 
}