java - 带有 paintComponent 的 10x10 棋盘

标签 java swing

我的任务是通过 paintComponent 方法创建一个 10x10 可调整大小的棋盘。
我的问题是第一行正确,但下一行不显示,我根本不知道我的错误在哪里

GrafikPanel 类:

import java.awt.*;
import javax.swing.*;

public class GrafikPanel extends JPanel {
    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        int width = g.getClipBounds().width;
        int height = g.getClipBounds().height;

        int lines = 0;
        while(lines < 10){
            int posH = height;
            int posW = width/10;
            int squares = 0;
            while(squares < 10){
                if(squares%2 == 0){
                    if(lines%2 != 0){
                        g.setColor(Color.BLACK);
                    }
                    else {
                        g.setColor(Color.WHITE);
                    }
                    g.fillRect(width-posW, height-posH, width/10, height/10);
                }
                if(squares%2 != 0){
                    if(lines%2 != 0){
                        g.setColor(Color.WHITE);
                    }
                    else {
                        g.setColor(Color.BLACK);
                    }
                    g.fillRect(width-posW, height-posH, width/10, height/10);
                }
                posW += width/10;
                squares++;
            }
            posH -= height/10;
            lines++;
        }
    }
    @Override
    public Dimension getPreferredSize(){
        return new Dimension(500, 500);
    }
}

Auf1 类:

import java.awt.*;
import javax.swing.*;

public class Auf1 extends JFrame {
    GrafikPanel panel;
    public Auf1(){
        setTitle("Schachbrett");

        panel = new GrafikPanel();
        add(panel);

        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    public static void main(String[] args){
        new Auf1();
    }
}

我的代码格式不正确,因为我不习惯这里输入代码的方式,抱歉。 如果有人能告诉我在哪里我也想纠正我的错误,那就太好了。

最佳答案

我认为你应该改变在棋盘上放置方 block 的态度。你的态度有点令人困惑,因为它试图从板的右侧创建一个偏移量,并且每次在循环中你都会减小尺寸和偏移量。

我用另一种方法从左到右计算正方形的位置,现在它变得更短更容易理解:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JPanel;

public class GrafikPanel extends JPanel {
    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        int width = g.getClipBounds().width;
        int height = g.getClipBounds().height;
        //
        int rowOffset = width/10;
        int colOffset = height/10;
        int squareWidth = width/10;
        //
        int lines = 0;
        while(lines < 8){

            int squares = 0;

            while(squares < 8){
                if(squares%2 == 0)
                {
                    g.setColor(lines%2 != 0 ? Color.BLACK : Color.WHITE);
                }
                else
                {
                    g.setColor(lines%2 != 0 ? Color.WHITE : Color.BLACK);
                }
                g.fillRect(rowOffset+(squares*squareWidth), colOffset+(lines*squareWidth), squareWidth, squareWidth);
                //
                squares++;
            }

            lines++;
        }
    }
    @Override
    public Dimension getPreferredSize(){
        return new Dimension(500, 500);
    }
}

此外,我已将行数和列数从 10 更改为 8。

希望对您有所帮助,

祝你好运。

关于java - 带有 paintComponent 的 10x10 棋盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33235044/

相关文章:

java - 使用 JFrame 和 JPanel 绘制线条

java - JUnit、Selenium 和拆解

java - 处理程序真正将其消息发布到哪里?

java - 如何确定应用程序中使用了哪些 JAR

java - For 循环会停止我的 swing 应用程序,直到循环完成

Java ActionListener - 更改 actionPerformed 中的变量

java - 代理的Weblogic设置

java - 在 Android Things 中使用 SharedPreferences

java - 删除按钮的矩形边框

java - 我想要一个带有新 getMinimumSize() 的 JLabel