提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
所以我一直在试图解决这个问题,但我不确定如何......我一直在这里处理这段代码:
public class Main extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
drawGrass(g);
drawFlowers(g);
}
private void drawGrass(Graphics g) {
super.paintComponent(g);
Color brightGreen= new Color(60,176,31);
g.setColor(brightGreen);
g.setColor(brightGreen);
g.fillRect(0,300,500,500);
}
private void drawFlowers(Graphics g) {
super.paintComponent(g);
Color pinkFlower = new Color(225,153,153);
g.setColor(pinkFlower);
g.fillRect(25,320,8,8);
g.fillRect(320,380,8,8);
g.fillRect(110,355,8,8);
}
我发现它只会绘制花朵,因为它覆盖了 drawGrass。 我将如何使它不会覆盖我的其他代码?
开始更简单。 如果您只使用一种方法,它应该可以正常工作。
public class Main extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// draw grass
Color brightGreen= new Color(60,176,31);
...
// draw flower
Color pinkFlower = new Color(225,153,153);
...
}
}
所以如果你想把两种颜色和绘图提取到方法中,你只需要在注释之间复制那些确切的行(你甚至可以使用你的IDE功能来“提取方法”),而不是添加另一个super.paintComponent(g)
(这就是清除面板的内容)
关于问题标题,实际上, private void
不是问题或与解决方案相关。
问题出在 drawFlowers 方法(并在 drawGrass 方法上重复)的第一行上的 super.paintComponent(g) 上。 你不能那样做。 删除它,再试一次,它会起作用。 请记住,当你在另一个方法中调用一个方法时,你的所有代码就像“在第一个方法中”......所以,你现在的代码就像
public void paintComponent(Graphics g) {
super.paintComponent(g);//fist call.
super.paintComponent(g);//duplicated, delete it on drawGrass method.
Color brightGreen= new Color(60,176,31);
g.setColor(brightGreen);
g.setColor(brightGreen);
g.fillRect(0,300,500,500);
super.paintComponent(g);//this is biggest problem, this overrides all work, remove it.
Color pinkFlower = new Color(225,153,153);
g.setColor(pinkFlower);
g.fillRect(25,320,8,8);
g.fillRect(320,380,8,8);
g.fillRect(110,355,8,8);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.