在java中有Paint循环麻烦

时间:2014-11-18 00:53:01

标签: 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;
    }


}
}

1 个答案:

答案 0 :(得分:2)

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

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

这会让你看到你想要的棋盘格。

Test

更近一步。你需要另一个for-loop来生成内圈,尽量不要直接修改你当前所依赖的值;)

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