【问题标题】:Having Paint loop trouble in java在java中出现Paint循环问题
【发布时间】:2014-11-18 00:53:01
【问题描述】:

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

这是我的 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 语句来定义您要使用的颜色,如果可以,请不要复制绘制代码。其次使用if ((i + j) % 2 == 0) { 代替if(i % 2 == 0) { 并删除else if 并将其替换为else,这应该更接近一步

标签: java swing loops paintcomponent


【解决方案1】:

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

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 块之外的其他绘制代码清除...

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

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

这将为您提供您所追求的棋盘外观。

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

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

【讨论】:

  • 非常感谢!是时候弄清楚圆圈了xD
  • 记住,绘画很有趣,凌晨 2 点更有趣!
  • 这很有趣,因为我发布这个问题时已经很晚了xD
  • 顺便说一下,我知道 for 循环在这个程序中需要看起来像什么,但我似乎不知道在哪里放置它。这是我到目前为止的循环 - for(i = 1; i
  • 你需要把它放在两个循环中,在你画出第一个外圆之后...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
相关资源
最近更新 更多