Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用随机设置绘制一系列同心圆_Java_Swing_Jpanel_Java 2d_Paintcomponent - Fatal编程技术网

Java 使用随机设置绘制一系列同心圆

Java 使用随机设置绘制一系列同心圆,java,swing,jpanel,java-2d,paintcomponent,Java,Swing,Jpanel,Java 2d,Paintcomponent,我真的被困在如何编程上了。需要在以下条件下使用Java drawArc方法绘制一系列8个同心圆 使用导入java.util.Random库 提供在随机位置(即x-y)开始绘制图纸 cooridinate必须随机计算) 为每个圆提供随机颜色 为每个圆提供一个随机直径 我当前的代码能够为每个圆获得随机颜色,但不清楚如何满足其他随机条件 // Exercise 12.6 Solution: CirclesJPanel.java // This program draws concentric circ

我真的被困在如何编程上了。需要在以下条件下使用Java drawArc方法绘制一系列8个同心圆

使用导入java.util.Random库

  • 提供在随机位置(即x-y)开始绘制图纸 cooridinate必须随机计算)
  • 为每个圆提供随机颜色
  • 为每个圆提供一个随机直径
  • 我当前的代码能够为每个圆获得随机颜色,但不清楚如何满足其他随机条件

    // Exercise 12.6 Solution: CirclesJPanel.java
    // This program draws concentric circles
    import java.awt.Graphics;
    import javax.swing.JPanel;
    
    public class ConcentricCircles extends JPanel
    {
      // draw eight Circles separated by 10 pixels
       public void paintComponent( Graphics g )
       {
          Random random = new Random();
          super.paintComponent( g );
    
          // create 8 concentric circles
          for ( int topLeft = 0; topLeft < 80; topLeft += 10 )
          {
             int radius = 160 - ( topLeft * 2 );
             int r = random.nextInt(255);
             int gr = random.nextInt(255);
             int b = random.nextInt(255);
             Color c = new Color(r,gr,b);
             g.setColor(c);
             g.drawArc( topLeft + 10, topLeft + 25, radius, radius, 0, 360 );
          } // end for
       }  
    }
    
    // This program draws concentric circles
    import javax.swing.JFrame;
    
    public class ConcentricCirclesTest extends JFrame {
        /**
        * @param args
        */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            JFrame frame=new JFrame("Concentric Circles");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            ConcentricCircles cCirclesJPanel = new ConcentricCircles();
            frame.add(cCirclesJPanel);
            frame.setSize(200,250);
            frame.setVisible(true);
    
    
        }//end main
    }
    
    //练习12.6解决方案:CirclesJPanel.java
    //这个程序画同心圆
    导入java.awt.Graphics;
    导入javax.swing.JPanel;
    公共类同心圆扩展JPanel
    {
    //画八个圆圈,间隔10像素
    公共组件(图形g)
    {
    随机=新随机();
    超级组件(g);
    //创建8个同心圆
    对于(int-topLeft=0;topLeft<80;topLeft+=10)
    {
    整数半径=160-(左上角*2);
    int r=random.nextInt(255);
    int gr=random.nextInt(255);
    int b=随机的.nextInt(255);
    颜色c=新颜色(r、gr、b);
    g、 setColor(c);
    g、 牵引弧(左上+10,左上+25,半径,半径,0,360);
    }//结束
    }  
    }
    //这个程序画同心圆
    导入javax.swing.JFrame;
    公共类同心圆测试扩展JFrame{
    /**
    *@param args
    */
    公共静态void main(字符串[]args){
    //TODO自动生成的方法存根
    JFrame=新的JFrame(“同心圆”);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    同心圆cCirclesJPanel=新同心圆();
    frame.add(cCirclesJPanel);
    框架.设置尺寸(200250);
    frame.setVisible(true);
    }//端干管
    }
    
    这类练习的关键在于以下几点:

    • 从圆圈数和步长的常数开始;特别是随机数生成器只需要创建一次

      private static final int N = 8;
      private static final int S = 32;
      private static Random random = new Random();
      
    • 选择坐标位于绘图区域内的随机点

      // a random point inset by S
      int x = random.nextInt(getWidth() - S * 2) + S;
      int y = random.nextInt(getHeight() - S * 2) + S;
      
    • 对于每个圆,找到直径作为
      S
      的函数,添加一个步长的随机分数,并在所选点偏移半径处渲染圆弧

      for (int i = 0; i < N; i++) {
          g2d.setColor(…);
          int d = (i + 1) * S + random.nextInt(S / 2);
          int r = d / 2;
          g2d.drawArc(x - r, y - r, d, d, 0, 360);
      }
      
    • 替代以建立图形面板的大小

      private static final int W = S * 12;
      private static final int H = W;
      …
      @Override
      public Dimension getPreferredSize() {
          return new Dimension(W, H);
      
    • 另见


    这类练习的关键在于以下几点:

    • 从圆圈数和步长的常数开始;特别是随机数生成器只需要创建一次

      private static final int N = 8;
      private static final int S = 32;
      private static Random random = new Random();
      
    • 选择坐标位于绘图区域内的随机点

      // a random point inset by S
      int x = random.nextInt(getWidth() - S * 2) + S;
      int y = random.nextInt(getHeight() - S * 2) + S;
      
    • 对于每个圆,找到直径作为
      S
      的函数,添加一个步长的随机分数,并在所选点偏移半径处渲染圆弧

      for (int i = 0; i < N; i++) {
          g2d.setColor(…);
          int d = (i + 1) * S + random.nextInt(S / 2);
          int r = d / 2;
          g2d.drawArc(x - r, y - r, d, d, 0, 360);
      }
      
    • 替代以建立图形面板的大小

      private static final int W = S * 12;
      private static final int H = W;
      …
      @Override
      public Dimension getPreferredSize() {
          return new Dimension(W, H);
      
    • 另见


    从谷歌搜索“java随机数”开始,我可以得到每个圆的随机颜色,但不清楚如何接近半径和x,y坐标。想想哪些变量决定x,y坐标和半径。给这些变量分配随机值。嗯!。当我为x、y和半径设置随机值时,输出的似乎是分散的圆。我的理解是同心圆应该有一个共同的中心,我不知道如何在程序中反映这一点。你只为一个圆设置随机的x,y坐标。所有其他人都会使用相同的方法。通过谷歌搜索“java随机数”,我可以得到每个圆的随机颜色,但不清楚如何接近半径和x,y坐标。想想哪些变量决定x,y坐标和半径。给这些变量分配随机值。嗯!。当我为x、y和半径设置随机值时,输出的似乎是分散的圆。我的理解是同心圆应该有一个共同的中心,我不知道如何在程序中反映这一点。你只为一个圆设置随机的x,y坐标。所有其他人都会使用相同的颜色。我一定会尝试一下,因为我想在开始时为所有
    JPanel
    s随机设置一种颜色,尽管到目前为止我正在使用
    new Color(random.nextInt(256),…)
    ,尽管这种新东西看起来更有希望(希望它也能处理alpha部分,因为我总是忽略这一点)我一定会尝试一下,因为我想在一开始就为所有
    JPanel
    s随机设置一个颜色,尽管到目前为止我使用的是
    新颜色(random.nextInt(256),…)
    ,尽管这个新东西看起来更有希望(希望它也能处理alpha部分,因为我总是忽略它)