有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Swing绘制网格。韦尔德结果

所以我用graphics2d在JPanel上画了一个网格

但当我调整窗口大小时,结果会很奇怪

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        /*
         * Draw the background
         */
        boolean isWhite = false;
        for(int x = 0; x < getSize().width/8; x++){
            for(int y = 0; y < getSize().height/8; y++){
                if(isWhite){
                    g2d.setColor(Color.white);
                    isWhite = false;
                }else{
                    g2d.setColor(Color.LIGHT_GRAY);
                    isWhite = true;
                }
                g2d.fillRect(8*x, 8*y, 8, 8);
            }
        }


        g2d.dispose();

    }

因此,它不会绘制8x8正方形,而是绘制水平矩形(getSize()。宽度()x8)


更新

我正在画一个网格来填充整个JPanel。因此,当窗口调整大小时,网格将展开,这是可行的。但它会画出奇怪的形状(有时)。网格单元的恒定大小为8x8

Normal shapeWeird shape


共 (1) 个答案

  1. # 1 楼答案

    使用下一个修复程序:

    boolean isWhite = false;
    boolean isWhiteLastLine = isWhite;
    for(int x = 0; x < getSize().height; x=x+8){
        for(int y = 0; y < getSize().width; y=y+8){
            if(y == 0){
                 isWhiteLastLine = isWhite;
            }
            if(isWhite){
                 g2d.setColor(Color.white);
            }else{
                 g2d.setColor(Color.LIGHT_GRAY);
            }
            g2d.fillRect(y, x, 8, 8);
            isWhite = !isWhite;
            if(y+8 >= getSize().width){
                 isWhite = !isWhiteLastLine;
            }
        }
    }