我不会只使用完全随机的颜色。你会得到完全不同的饱和度和亮度,看起来很丑。
您可以修复饱和度(为鲜艳的颜色选择较高的值)和亮度并选择随机的色调值,但您会冒着获得几乎相同颜色的两个连续饼图的风险。
我将计算一组展开的色调值,如该问题的答案所示:
在下面重新发布答案
import java.awt.*;
public class TestComponent extends JPanel {
int numCols = 6;
public void paint(Graphics g) {
float h = 0, dh = (float) getHeight() / numCols;
Color[] cols = getDifferentColors(numCols);
for (int i = 0; i < numCols; i++) {
g.setColor(cols[i]);
g.fillRect(0, (int) h, getWidth(), (int) (h += dh));
}
}
public static Color[] getDifferentColors(int n) {
Color[] cols = new Color[n];
for (int i = 0; i < n; i++)
cols[i] = Color.getHSBColor((float) i / n, 1, 1);
return cols;
}
public static void main(String s[]) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new TestComponent());
f.setSize(400, 400);
f.setVisible(true);
}
}
如果您需要超过 30 种颜色,您当然可以更改亮度,也许还可以更改饱和度,例如,有 10 种深色、10 种中间色调和 10 种亮色。