解决方案 »

  1.   

    可以有两种方案:小格子的大小固定,但行列数随Panel的size变化而调整;小格子的行列数不变,格子的大小变化。
    每次paint时,根据你的方案重新计算各行、列的坐标,然后画
      

  2.   


    import java.awt.BorderLayout;
    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Graphics;import javax.swing.JFrame;public class MainScreen extends JFrame {
    public static final int WIDTH = 35;
    public static final int ROWS = 16;
    public static final int COLS = 10;
    Mycanvas canvas = new Mycanvas();

    public MainScreen() {
    super("俄罗斯方块");
    setLayout(new BorderLayout());
    add("Center", canvas);
    setBounds(400, 20, COLS*WIDTH, ROWS*WIDTH);
    //setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);


    }

    public static void main(String[] args) {
    new MainScreen();
    } class Mycanvas extends Canvas {

    public void paint(Graphics g) {
    Color c = g.getColor();
    setBackground(Color.GRAY);
    g.setColor(Color.DARK_GRAY);
    for(int i=0; i<ROWS+1; i++) {
    g.drawLine(0, MainScreen.WIDTH * i, COLS * MainScreen.WIDTH, MainScreen.WIDTH * i);
    }
    for(int i=0; i<COLS+1; i++) {
    g.drawLine(MainScreen.WIDTH * i, 0, MainScreen.WIDTH * i, MainScreen.WIDTH * ROWS);
    }
    }

    }
    我想要的效果是 窗口是固定了的,现在代码里我没固定,我在画布上画了格子,但是被标题栏之类的遮住了,怎么做才能做到画布的大小是窗口的可见部分的大小?笨方法是可以试出来,可有没有好的方法呢