无论出于何种原因,我的循环似乎没有正确打印颜色。我在填充和绘制之前设置了颜色,但它根本没有显示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;
}
}
}
答案 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);
}
这会让你看到你想要的棋盘格。
更近一步。你需要另一个for-loop
来生成内圈,尽量不要直接修改你当前所依赖的值;)
你也可以使用if
块来定义你需要使用的背景和前景颜色,将它们分配给一些变量并在paint部分中应用它们,这将为你提供更大的灵活性