对形状进行分组,这样我就可以通过鼠标点击循环浏览它们-处理和java

对形状进行分组,这样我就可以通过鼠标点击循环浏览它们-处理和java,java,processing,Java,Processing,我有下面所示的代码,它可以显示2,3,4,5,6,7,8个圆圈围绕一个较大的圆圈,每个圆圈的间距相等 我知道代码编写得很长,但我不知道编码值的较短方法-如何让代码为我计算出坐标 我的问题分为两部分 如何对代码进行分组,使前两个椭圆是一个组,后三个椭圆是一个组,依此类推 我如何在小组中循环, 鼠标左键按下=组向后移动一个 鼠标右键按下=组向前移动一个 我一直在读关于如何创建形状组的书,但我知道如何创建形状组吗?如果我能做到这一点,我想如果按下鼠标左键,显示图像+1等,我将有机会编写代码 i

我有下面所示的代码,它可以显示2,3,4,5,6,7,8个圆圈围绕一个较大的圆圈,每个圆圈的间距相等

我知道代码编写得很长,但我不知道编码值的较短方法-如何让代码为我计算出坐标

我的问题分为两部分

  • 如何对代码进行分组,使前两个椭圆是一个组,后三个椭圆是一个组,依此类推

  • 我如何在小组中循环, 鼠标左键按下=组向后移动一个 鼠标右键按下=组向前移动一个

  • 我一直在读关于如何创建形状组的书,但我知道如何创建形状组吗?如果我能做到这一点,我想如果按下鼠标左键,显示图像+1等,我将有机会编写代码

        int b, w;
    void setup () {
      size (600, 600); //size of the sceen
      background (255, 255, 255); //colour of the screen
      b = 0; //sets value of b
      w = 255; //sets value of white
      //frameRate (1);
      fill (b);
      ellipse (300, 190, 20, 20);
      ellipse (300, 410, 20, 20);
    
      // above is for 2 ellipses
    /*
    fill (b);
      ellipse (300, 190, 20, 20);
      ellipse (395.2627944, 355, 20, 20);
      ellipse (204.7372056, 355, 20, 20);
    
      //above is for 3 ellipses
    
    fill (b);
      ellipse (300, 190, 20, 20);
      ellipse (410, 300, 20, 20);
      ellipse (300, 410, 20, 20);
      ellipse (190, 300, 20, 20);
    
      //above is for 4 ellipses
    
    fill (b);
      ellipse (300, 190, 20, 20);
      ellipse (404, 266, 20, 20);
      ellipse (364, 388, 20, 20); 
      ellipse (235, 388, 20, 20);
      ellipse (195, 271, 20, 20);
    
      //above is for 5 ellipses
    
    fill (b);
      ellipse (300, 190, 20, 20);
      ellipse (395, 245, 20, 20);  
      ellipse (395, 355, 20, 20);
      ellipse (300, 410, 20, 20);
      ellipse (204, 355, 20, 20);
      ellipse (204, 245, 20, 20);
    
      //above is for 6 ellipses
    
    fill (b);
      ellipse (300, 190, 20, 20);
      ellipse (386, 231, 20, 20);  
      ellipse (407, 324, 20, 20);
      ellipse (348, 399, 20, 20);
      ellipse (252, 399, 20, 20);
      ellipse (192, 324, 20, 20);
      ellipse (214, 231, 20, 20);
    
      //above is for 7 ellipses
    
    fill (b);
      ellipse (300, 190, 20, 20);
      ellipse (378, 222, 20, 20);  
      ellipse (410, 300, 20, 20);
      ellipse (378, 378, 20, 20);
      ellipse (300, 410, 20, 20);
      ellipse (222, 378, 20, 20);
      ellipse (190, 300, 20, 20);
      ellipse (222, 222, 20, 20);
    
      //above is for 8 ellipses
      */
    }
    
    void draw() {
    
      //fill (w);
      //ellipse (width/2, height/2, 200, 200); // the guide circle. Not needed in final code.
    }
    
    我不是已经创建了每个圆作为一个形状吗?(我在这里是一个挣扎的新手!)

    我想知道我是否可以用这种方式来代替。 我可以为每个椭圆创建一个变量吗。然后按一下键调用每个椭圆(或几个椭圆)

    差不多

    int c1, c2, c3, c4, c5, c6;
    void setup() {
    size (600,600);
    background (255,255,255);
    c1 = ellipse (300, 190, 20, 20);
    c2 = ellipse (300, 410, 20, 20);
    //etc
    
    }
    
    void draw() {
    
    if '+' pressed, show c1, c2
    
    if '+' pressed again, show c1, c3, c4
    
    if '+' pressed again, show c1, c2, c5, c6
    
    }
    

    第一步不是尽可能地重新发明轮子

    JavaSwing有一个几何API,请查看和了解更多详细信息

    根据您的需要,您可以使用
    映射
    列表
    或两者的组合来创建一组形状

    List<Shape> group = new ArrayList<Shape>(25);
    group.add(new Ellipse2D.Float(300, 190, 20, 20));
    group.add(new Ellipse2D.Float(300, 410, 20, 20));
    

    Graphics2D
    API也支持形状API,允许您通过将形状的引用传递给它来绘制和/或填充形状。

    查看形状API,将每个圆创建为一个形状并将其放入列表中,使形状的contains方法确定鼠标点是否与形状的边界一致Shape@MadProgrammer我想发表评论,但找不到如何在评论中显示代码,因此我将发布问题的答案。有一个名为Shape的基类,包括矩形和椭圆2d,哪一个可以完成你想要的所有工作我该如何使用那个基类?你能给我链接一个教程吗?感觉很困!谢谢你的帮助。非常感谢。@mikeeustace澄清您是否使用纯Java或处理。请删除相应的标签。我认为OP正在使用处理。同时使用Swing和Processing时必须小心:对于仅与处理相关的问题,同时使用Processing和Java标记的海报存在问题。这就产生了问题和困惑。对于Swing,顺便说一句,回答得很好。@NicolásCarlo感谢您提供的uodate,我想这个问题只有在我偶然发现它或者它太晚了,需要睡觉时才被标记为Java:P
    public void mousePressed(MouseEvent evt) {
        for (Shape shape : group) {
            if (group.contains(evt.getPoint())) {
                // The shape was clicked...
            }
        }
    }