有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

我的问题分为两部分

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

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

我一直在读关于如何创建形状组的书,但我知道如何创建形状组吗?如果我能做到这一点,我想如果按下鼠标左键,显示图像+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

}

共 (1) 个答案

  1. # 1 楼答案

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

    Java Swing有一个几何API,请查看2D GraphicsWorking with Geometry了解更多详细信息

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

    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));
    

    然后,您可以使用Map或另一个List对这些组进行分组,但这将取决于您的需要

    现在,这样做的好处是你可以获得很多额外的功能,例如,你可以改变形状,改变它的位置或旋转,如果你想的话,但是你也可以获得一些额外的功能来确定给定的点是否在形状内

    通过使用^{},您可以捕获mouseClicked事件并在集合中循环

    public void mousePressed(MouseEvent evt) {
        for (Shape shape : group) {
            if (group.contains(evt.getPoint())) {
                // The shape was clicked...
            }
        }
    }
    

    shape API还受Graphics2DAPI支持,允许您只需将形状的引用传递给它,即可绘制和/或填充形状