java - Swing 绘制网格。奇怪的结果

标签 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().width()x8)。


更新

我正在绘制一个将填充整个 JPanel 的网格。因此,当窗口大小调整时,网格将扩展并且有效。但它会画出奇怪的形状(有时)。网格单元的大小恒定为 8x8

Normal shape Weird shape

最佳答案

使用下一个修复:

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

关于java - Swing 绘制网格。奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20743766/

相关文章:

java - 需要帮助创建内部日志文件

java - 如何在 Swing 中实现同时在 Windows 和 Linux 下运行的弹出菜单

java - 在哪里可以找到为 GroupLayout 构建组的工具?

java - 使用迭代器从 HashMap 获取(键,值)对

java - 从特定主题中检索 Kafka 消费者的最后 n 条消息

java - 动态创建的Jlabel的对齐

Java:JFrame 对话框中的文本未换行

java - JTable 遮住了按钮,布局编辑需要帮助

java - SwingWorker 中的 thread.sleep()

java - 在 Java 中使用断言