所以我有一个正在进行的课程项目,你必须创建一个用圆圈填充的GUI框,除了中间50%的屏幕不能用圆圈填充。此外,每个圆圈的红色值从屏幕的顶部到底部线性缩放,顶部为0,底部为255。这是它应该是什么样子:
这就是我所拥有的。我尝试做255/500(500是高度),以获得一个缩放因子,然后我将使用它来乘以我所有的y坐标,以获得指定的红色值并且它起作用。 255/500的答案是0.51,当我用0.51而不是y *(255 / getHeight())时;有效。但是,我需要它来处理框架的任何尺寸,因此0.51不起作用。由于某种原因,y *(255 / getHeight())不起作用,它似乎返回0,因为圆圈是蓝色和绿色的各种阴影。我该怎么做才能解决这个问题?
我的代码:
public class NewJComponent1 extends JComponent {
public void paintComponent(Graphics g) {
int count = 0;
int diameter = 0;
Random rand = new Random();
while (count < 5000) {
int x = rand.nextInt(getWidth() + 1);
int y = rand.nextInt(getHeight() + 1);
int greenValue = rand.nextInt(256);
int blueValue = rand.nextInt(256);
diameter = rand.nextInt(21) + 10;
int redValue = y * (255 / getHeight());
Color random = new Color (redValue, greenValue, blueValue);
if ((x < (getWidth() / 4) && y <= (getHeight() - diameter))
|| ((x > (getWidth() * .75) && (x < getWidth() - diameter)) && y <= (getHeight() - diameter))
|| (x <= (getWidth() - diameter) && y < (getHeight() / 4))
|| (x <= (getWidth() - diameter) && ((y > (getHeight() * .75)) && (y <= getHeight() - diameter)))){
g.setColor(random);
g.fillOval(x, y, diameter, diameter);
count++;
}
}
System.out.println(getHeight());
System.out.println(getWidth());
}
}
我尝试了redValue
代码的各种迭代,交换顺序,对int进行双重和类型转换,以及其他各种各样的事情,但我无法使其工作。我确定这是一个小错误,搞乱了一切,但无论如何,无论如何都要感谢你的帮助。我正在使用Android Studio,不确定这是否会影响任何事情。
答案 0 :(得分:4)
替换此行
int redValue = y * (255 / getHeight());
带
int redValue = (int) Math.round(y * (255.0 / (double) getHeight()));
只需将redValue
更改为double
,就不会改变255/getHeight()
为整数除法的事实。