如何用java制作动态颜色网格

时间:2010-10-07 08:06:52

标签: java colors

我想创建一个可以创建动态颜色网格的Java程序。比方说我想制作10个网格,那么颜色网格将间隔很宽。 它是30,那么它将是紧密间隔的。这是一张图片:http://i.stack.imgur.com/D2yba.png

每个网格都应该负责制作一个活动。 哦,是的,会有一系列的颜色。类似10 t0 100的东西。

我首先尝试使用随机功能。我们知道rgb的颜色范围是0到255.所以我试着做一些随机颜色,但是一种颜色可以再来,然后它会弄乱我的整个事情。我想要一些独特的颜色网格,没有重复。其实我想要的东西与图像完全一样。

任何人都可以帮助我!

3 个答案:

答案 0 :(得分:0)

您可以从查看JColorChooser开始,如How to Use Color Choosers中所述。一种生成光谱系列颜色的简单方法是使用HSB模型;选择0到315范围内的色调,恒定饱和度和亮度。你的问题对于事件并不是很具体,但是当鼠标在每种颜色上移动时,这里显示的信息是example

答案 1 :(得分:0)

如何操纵颜色以制作可爱的彩虹的一个例子。

public class RainBowColorGenerator
{
  private static final int NR255 = 255;
  private static final int YELLOW_TRESHOLD = 200;

  private int r;
  private int g;
  private int b;

  public RainBowColorGenerator()
  {
    this(0, NR255, 0);
  }

  /**
   * Extra constructor so you can start with your own color in stead of the default green.
   * @param red the red component
   * @param green the green component
   * @param blue the blue component
   * @see java.awt.Color
   */
  public RainBowColorGenerator(int red, int green, int blue)
  {
    this.r = red;
    this.g = green;
    this.b = blue;
  }

  /**
   * Makes the next Color.
   * @return a Color
   */
  public Color nextColor()
  {
    nextRGB();
    return makeColor();
  }

  /**
   * Makes the next Color with a  bigger change then the unparametrized nextColor method.
   * @param jump the number of steps that should be taken, use 256 if you only want the primary colors.
   * @return a Color , yes indeed a color.
   */
  public Color nextColor( int jump )
  {
    for (int i = 0; i < jump; i++)
      {
      nextRGB();
      }
    return makeColor();
  }

  /**
   * Makes the next Color with a bigger change then the unparametrized nextColor method.
   * @param jump the number of steps that should be taken, use 256 if you only want the primary colors.
   * @return a Color , that will be never be really close to yellow.
   */
  public Color nextNonYellowColor( int jump )
  {
    Color color =  nextColor(jump);
    while ( color.getRed() > YELLOW_TRESHOLD && color.getGreen() > YELLOW_TRESHOLD )
      {
      color = nextColor(jump);
      }
    return color;
  }

  private void nextRGB()
  {
    if ( r == NR255 && g < NR255 && b == 0 )
      {
      g++;
      }
    if ( g == NR255 && r > 0 && b == 0 )
      {
      r--;
      }
    if ( g == NR255 && b < NR255 && r == 0 )
      {
      b++;
      }
    if ( b == NR255 && g > 0 && r == 0 )
      {
      g--;
      }
    if ( b == NR255 && r < NR255 && g == 0 )
      {
      r++;
      }
    if ( r == NR255 && b > 0 && g == 0 )
      {
      b--;
      }
  }

  private Color makeColor()
  {
    return new Color(r, g, b);
  }

  public static void main( String[] args )
  {
    final RainBowColorGenerator bow = new RainBowColorGenerator();
    JFrame frame = new JFrame(RainBowColorGenerator.class.toString());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    final JPanel mainpanel = new JPanel()
    {
      @Override
      public void paint( Graphics g )
      {
        super.paint(g);
        int w = getWidth();
        int h = getHeight();

        for (int i = 0; i< w; i++)
          {
          g.setColor(bow.nextColor(2));
          g.drawLine(i,0,i,h);
          }

      }
    };

    frame.getContentPane().add(mainpanel);
    //noinspection MagicNumber
    frame.setSize(800, 800);
    frame.setVisible(true);
  }
}

答案 2 :(得分:0)

  

其实我想要一些完全一样的东西   图像。

该图像不显示随机颜色。它显示了颜色的不同“色调”。由于你有30种颜色,它基本上每12度(360度圆圈)显示不同的颜色。这些颜色更容易用非RGB颜色方案表示。

查看HSL Color示例,了解轻松完成此操作的方法。