java - java中Paint循环出现问题

标签 java swing loops paintcomponent

无论出于何种原因,我的循环似乎没有正确打印颜色。我在填充和绘制之前设置了颜色,但它根本没有显示 Color.white。它显示出白色。为了更好地解释我想要的图片是什么样子,我附上一张照片。感谢您的帮助!

enter image description here

这是我的ExampleGUI.java源代码

import javax.swing.*;

public class ExampleGUI {
public static void main(String args []) {


    JFrame frame = new JFrame("Example Graphics");
    ExamplePanel panel = new ExamplePanel();

    frame.getContentPane().add(panel);
    frame.setDefaultCloseOperation(3);
    frame.pack();
    frame.setVisible(true);

}
}

这是我的ExamplePanel.java源代码

  import java.awt.*;

  import javax.swing.*;


public class ExamplePanel extends JPanel{

public ExamplePanel() {
    setPreferredSize(new Dimension (600, 600));
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);


    int x = 0;
    int x2 = 5;
    int y = 500;
    int y2 = 505;
    int w = 100;
    int w2 = 90;
    int h = 100;
    int h2 = 90;
    int i, j;

    for(j = 1; j < 7; j++) {
        x = 0;
        x2 = x + 5;

        for(i = 1; i < 7; i++) {
            if(i % 2 == 0) {
                g.setColor(Color.white);
                g.fillRect(x, y, w, h);
                g.setColor(Color.black);
                g.drawRect(x, y, w, h);
                g.setColor(Color.green);
                g.fillOval(x2, y2, w2, h2);
                g.setColor(Color.black);
                g.drawOval(x2, y2, w2, h2);

            }else if (i % 2 == 1 && j % 2 == 1)
                    g.setColor(Color.yellow);
                    g.fillRect(x, y, w, h);
                    g.setColor(Color.black);
                    g.drawRect(x, y, w, h);
                    g.setColor(Color.green);
                    g.fillOval(x2, y2, w2, h2);
                    g.setColor(Color.black);
                    g.drawOval(x2, y2, w2, h2);

            x = x + w;
            x2 = x2 + w2 + 10;


        }

        x = x + w;

        y = y - h;
        y2 = (y2 - h2) - 10;
    }


}
}

最佳答案

让我们从删除重复项开始,例如,而不是...

if (i % 2 == 0) {
    g.setColor(Color.white);
    g.fillRect(x, y, w, h);
    g.setColor(Color.black);
    g.drawRect(x, y, w, h);
    g.setColor(Color.green);
    g.fillOval(x2, y2, w2, h2);
    g.setColor(Color.black);
    g.drawOval(x2, y2, w2, h2);

} else if (i % 2 == 1 && j % 2 == 1) {
    g.setColor(Color.yellow);
}
g.fillRect(x, y, w, h);
g.setColor(Color.black);
g.drawRect(x, y, w, h);
g.setColor(Color.green);
g.fillOval(x2, y2, w2, h2);
g.setColor(Color.black);
g.drawOval(x2, y2, w2, h2);

你真的只需要...

if (i % 2 == 0) {
    g.setColor(Color.white);
} else if (i % 2 == 1 && j % 2 == 1) {
    g.setColor(Color.yellow);
}
g.fillRect(x, y, w, h);
g.setColor(Color.black);
g.drawRect(x, y, w, h);
g.setColor(Color.green);
g.fillOval(x2, y2, w2, h2);
g.setColor(Color.black);
g.drawOval(x2, y2, w2, h2);

您在第一个 if 语句中所做的任何操作都会被 if-else block 之外的其他绘制代码删除...

接下来,你的逻辑有点不对劲,而不是......

if (i % 2 == 0) {
    g.setColor(Color.white);
} else if (i % 2 == 1 && j % 2 == 1) {
    g.setColor(Color.yellow);
}

你可以使用更像......的东西

if ((i + j) % 2 == 0) {
    g.setColor(Color.white);
} else {
    g.setColor(Color.yellow);
}

这将为您带来您想要的棋盘外观。

Test

再靠近一点。您将需要另一个 for-loop 来生成内圈,但尽量不要直接修改您当前依赖的值;)

您还可以使用if block 来定义您需要使用的背景和前景色,将它们分配给一些变量并将它们应用到绘画部分,这将为您提供更大的灵 active

关于java - java中Paint循环出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26984778/

相关文章:

java - 在哪里使用 Netbeans 本地化某些菜单项中的字符串?

java - 连续按键

javascript - 两个数组结果在 Javascript 中创建新数组

javascript - 在循环中创建多个 Canvas ,仅调用最后一个函数

java - map 中的 3 亿个项目

java - WebDriver + TestNG - 如何处理测试结果

java - 从具有完整 future 的循环中的数据库获取结果

java - JSplitPane 右侧组件的背景图像

javascript - 使用 jQuery 在 js 中的日历上创建事件,我遇到了一个奇怪的错误

java - HSQLDB - 如何在检查约束中使用自定义函数