Processing 如何对处理中的两个不同事件使用mousePressed()?

Processing 如何对处理中的两个不同事件使用mousePressed()?,processing,Processing,我正在做我的大学项目,遇到了一个问题。我正在为一些数据创建一个可视化,并希望对不同的事件使用mousePressed,但当我尝试将另一个事件添加到mousePressed时,它将不会运行,因为当按下鼠标时,代码不知道要运行哪个事件,它会触发两个事件 我制作了一个事件,允许用户单击主菜单按钮,并希望在用户处于PieChart页面时制作另一个事件,他们可以单击PS_按钮,这是一个PlayStation徽标,以显示说明。现在,用户可以将鼠标悬停在PS_按钮上,并显示说明,但我希望用户单击PS_按钮,以

我正在做我的大学项目,遇到了一个问题。我正在为一些数据创建一个可视化,并希望对不同的事件使用mousePressed,但当我尝试将另一个事件添加到mousePressed时,它将不会运行,因为当按下鼠标时,代码不知道要运行哪个事件,它会触发两个事件

我制作了一个事件,允许用户单击主菜单按钮,并希望在用户处于PieChart页面时制作另一个事件,他们可以单击PS_按钮,这是一个PlayStation徽标,以显示说明。现在,用户可以将鼠标悬停在PS_按钮上,并显示说明,但我希望用户单击PS_按钮,以便说明保留在屏幕上。我为描述格式创建了一个类“ImageButton”,如果可能的话,我不确定如何将鼠标按下的代码添加到该类中,并且仍然使用其余的代码

这是我的密码:

在设置绘图页中:鼠标按下-第180行,图片页-第244行

该链接包含代码和代码中使用的数据。 非常感谢您的帮助,谢谢

设置绘图:

当前鼠标按下并注释的是我要添加的代码:

void mousePressed() {
  switch(state) {
  case 2:     // pie chart page
    ClickedMenuButton();
    println("Going back to state home from PC");
    //state = 1;
    break;
  case 3:      // bubble chart page
    ClickedMenuButton();
    println("Going back to state home from BG");
    break;
  case 4:      // scatter graph page
    ClickedMenuButton();
    println("Going back to state home from SG");
    break;
  default:
    // menu
    ClickMenu();
  }
}

//void mousePressed() {
//  if ( mouseX > psImgX && mouseX < (psImgX + PS_Button.width) && mouseY > psImgY && mouseY < (psImgY + PS_Button.height)) {
//    psImageDscpt.drawPieChartDscpt();
//  }
//}

ImageButton类:

class ImageButton {
  String pieDscptLabel;
  int xPos1, yPos1, xPos2, yPos2;
  float wDiam1, hDiam1;

  ImageButton (String pieDscptLabel, int xPos1, int yPos1, float wDiam1, float hDiam1) {
    this.pieDscptLabel=pieDscptLabel;
    this.xPos1=xPos1;
    this.yPos1=yPos1;
    this.wDiam1=wDiam1;
    this.hDiam1=hDiam1;
  }

  void drawPieChartDscpt() { //draws the bubbles description
    noFill();
    stroke(225);
    rect(xPos1, yPos1, wDiam1, hDiam1, 20);
    textAlign(LEFT, BASELINE);
    fill(200);
    text(pieDscptLabel, xPos1+10, yPos1+20);
  }

  void mousePressed() {
    if ( mouseX > psImgX && mouseX < (psImgX + PS_Button.width) && mouseY > psImgY && mouseY < (psImgY + PS_Button.height)) {
      psImageDscpt.drawPieChartDscpt();
      println("it works");
    }
  }
}

你不需要写两个mousePressed方法,只需测试方法中的情况,以区分你正在处理的情况,阅读一些内容后,我认为当用户在pieChartPage上时,你的状态变量等于2,所以我将你的代码移到第一个mousePressed中并添加了测试,draw description的方法调用工作正常,但用户单击时,必须将其更改为在可见/不可见(而不是绘图)之间切换,以下是更新的代码:

void mousePressed() {
  if(state == 2)
  {
    if ( mouseX > psImgX && mouseX < (psImgX + PS_Button.width) && mouseY > psImgY && mouseY < (psImgY + PS_Button.height)) 
    {
      psImageDscpt.drawPieChartDscpt();
    }
  }
  
  switch(state) {
  case 2:     // pie chart page
    ClickedMenuButton();
    println("Going back to state home from PC");
    //state = 1;
    break;
  case 3:      // bubble chart page
    ClickedMenuButton();
    println("Going back to state home from BG");
    break;
  case 4:      // scatter graph page
    ClickedMenuButton();
    println("Going back to state home from SG");
    break;
  default:
    // menu
    ClickMenu();
  }
}
其次,更改“单击Playstation图像”事件以反转上一个布尔图像,而不是调用该绘制方法:

void mousePressed() {
  if(state == 2)
  {
    if ( mouseX > psImgX && mouseX < (psImgX + PS_Button.width) && mouseY > psImgY && mouseY < (psImgY + PS_Button.height)) 
    {
      //inverte the boolean
      show_ps_description=!show_ps_description;
    }
  }
  ...
}

你不需要写两个mousePressed方法,只需测试方法中的情况,以区分你正在处理的情况,阅读一些内容后,我认为当用户在pieChartPage上时,你的状态变量等于2,所以我将你的代码移到第一个mousePressed中并添加了测试,draw description的方法调用工作正常,但用户单击时,必须将其更改为在可见/不可见(而不是绘图)之间切换,以下是更新的代码:

void mousePressed() {
  if(state == 2)
  {
    if ( mouseX > psImgX && mouseX < (psImgX + PS_Button.width) && mouseY > psImgY && mouseY < (psImgY + PS_Button.height)) 
    {
      psImageDscpt.drawPieChartDscpt();
    }
  }
  
  switch(state) {
  case 2:     // pie chart page
    ClickedMenuButton();
    println("Going back to state home from PC");
    //state = 1;
    break;
  case 3:      // bubble chart page
    ClickedMenuButton();
    println("Going back to state home from BG");
    break;
  case 4:      // scatter graph page
    ClickedMenuButton();
    println("Going back to state home from SG");
    break;
  default:
    // menu
    ClickMenu();
  }
}
其次,更改“单击Playstation图像”事件以反转上一个布尔图像,而不是调用该绘制方法:

void mousePressed() {
  if(state == 2)
  {
    if ( mouseX > psImgX && mouseX < (psImgX + PS_Button.width) && mouseY > psImgY && mouseY < (psImgY + PS_Button.height)) 
    {
      //inverte the boolean
      show_ps_description=!show_ps_description;
    }
  }
  ...
}

如果您不知道如何更改drawPieChartDscpt来解决第二个问题,请告诉我好的,我做了您添加的操作,它可以工作,但是我如何做到当用户按下按钮时,说明将保留在该页面的屏幕上。所以,直到他们再次点击相同的按钮,描述才会出现在屏幕上,希望有意义,谢谢你的支持help@migueldivo我编辑了答案来修复这个问题,检查我添加的内容,并尝试了一下,效果非常好。感谢您的帮助,并对您添加的内容进行了很好的解释。非常感谢如果您不知道如何更改drawPieChartDscpt来解决您的第二个问题,请告诉我。好的,我做了您添加的操作,它可以正常工作,但是当用户按下按钮时,说明将保留在该页面的屏幕上。所以,直到他们再次点击相同的按钮,描述才会出现在屏幕上,希望有意义,谢谢你的支持help@migueldivo我编辑了答案来修复这个问题,检查我添加的内容,并尝试了一下,效果非常好。感谢您的帮助,并对您添加的内容进行了很好的解释。非常感谢你不要破坏你的帖子。通过在此网站上发布,您已不可撤销地授予Stack Exchange network在其认为合适的时间内根据发布该内容的权利。有关删除的替代方法,请参阅:不要破坏您的帖子。通过在此网站上发布,您已不可撤销地授予Stack Exchange network在其认为合适的时间内根据发布该内容的权利。有关删除的替代方案,请参见:
void mousePressed() {
  if(state == 2)
  {
    if ( mouseX > psImgX && mouseX < (psImgX + PS_Button.width) && mouseY > psImgY && mouseY < (psImgY + PS_Button.height)) 
    {
      //inverte the boolean
      show_ps_description=!show_ps_description;
    }
  }
  ...
}
void draw() {
  switch(state) {
  case 2:
    // pie chart
    pieChartPage();
    drawMenuButton();
    
    if(show_ps_description)
      psImageDscpt.drawPieChartDscpt();
    
    break;
...
}