无论出于何种原因,我的循环似乎没有正确打印颜色。我在填充和绘制之前设置了颜色,但它根本没有显示 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
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);
}
这将为您带来您想要的棋盘外观。
再靠近一点。您将需要另一个 for-loop
来生成内圈,但尽量不要直接修改您当前依赖的值;)
您还可以使用if
block 来定义您需要使用的背景和前景色,将它们分配给一些变量并将它们应用到绘画部分,这将为您提供更大的灵 active
关于java - java中Paint循环出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26984778/