簡體   English   中英

在Java中出現Paint循環問題

[英]Having Paint loop trouble in java

無論出於什么原因,我的循環似乎都無法正確打印顏色。 在填充和繪制之前已設置好顏色,但根本沒有顯示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 (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塊來定義需要使用的背景色和前景色,將它們分配給一些變量,並將其應用到繪畫部分中,這將為您提供更大的靈活性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM