Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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_Events_Processing - Fatal编程技术网

Java 处理按钮事件

Java 处理按钮事件,java,events,processing,Java,Events,Processing,我正试图实现一个弹出窗口,以显示给定国家的作者信息,我设法做到了这一点。我加载了我的交互式地图,当我左键点击国家时,我确实收到了一条弹出消息。但是,只要我松开按钮,弹出窗口就会消失 我想弹出那个被画在那个里直到我右键点击它应该消失 所以我在实现它时遇到了问题,所以在mouseRelease()方法中显示的弹出窗口保持绘制状态 // Import libaries import org.gicentre.geomap.io.*; import org.gicentre.geomap.*; //

我正试图实现一个弹出窗口,以显示给定国家的作者信息,我设法做到了这一点。我加载了我的交互式地图,当我左键点击国家时,我确实收到了一条弹出消息。但是,只要我松开按钮,弹出窗口就会消失

我想弹出那个被画在那个里直到我右键点击它应该消失

所以我在实现它时遇到了问题,所以在mouseRelease()方法中显示的弹出窗口保持绘制状态

// Import libaries
import org.gicentre.geomap.io.*;
import org.gicentre.geomap.*;

// Instance new GeoMap
GeoMap geoMap;
PImage bgImage;

void setup()
{
  size(1280, 768);

  // Load background pattern img and implement AA for shapes
  bgImage = loadImage("bg.jpg");
  smooth();

  // New GeoMap instance
  geoMap = new GeoMap(this);

  // Load map shape
  geoMap.readFile("world");
}

void draw()
{
  // Fill ocean with bg image
  background(bgImage);

  // Change stroke color
  stroke(255, 255, 255);

  // Fill the continents color and draw the map
  fill(26, 117, 181);
  geoMap.draw();

  // Get country id by mouse location
  int countryID = geoMap.getID(mouseX, mouseY);

  // Offgrid: -1
  if (countryID != -1)
  {
    // Listen for mouse event and trigger action
    mouseReleased(countryID);
    // Color the select country
    fill(14, 96, 166);
    geoMap.draw(countryID);
  }
}

void mouseReleased(int countryID)
{
  // Act on left clicks
  if(mouseButton == LEFT)
  {
    println(getCountryName(countryID, 3));

    noStroke();
    fill(255, 192);
    rect(0, 0, width, 20);

    if (countryID != -1)
    {
      String name = getCountryName(countryID, 3);
      fill(0);
      textAlign(LEFT, CENTER);
      text(name, 0, 0, width, 20);
    }

  }
}


// Returns country name by id
String getCountryName(int id, int offset)
{
  // Get country name for query
  // getString(int id, int offset), int id: country id, int offset: 
  // Example USA
  // offset 0 = Country Code -> 257
  // offset 1 = Country Short Tag -> US
  // offset 2 = Country Short Name -> USA
  // offset 3 = Official Name -> United States
  String name = geoMap.getAttributes().getString(id, offset);

  return name;
}

问题是绘图功能不断重复,但只有在按下lmb时才绘图。一旦释放,下一次调用draw将在弹出窗口中显示

解决这个问题的一种方法是存储一个变量(比如“shouldDraw”)来告诉您是否绘制。当按下lmb时,您会将其设置为true,当按下人民币时,您会将其设置为false。然后,您将检查shouldDraw,而不是检查LEFT

我不熟悉您使用的框架,但可能有onClick方法或类似方法,这比draw更适合更改shouldDraw变量


如果单击然后移动鼠标,则会更改标签。如果希望保留相同的文本,可以存储一个字符串,并在无需绘制的情况下将其设置为null。

有一个名为MouseRelease的内置函数,在处理过程中不接受任何参数。你是故意超载的吗? 无论如何,这有点令人困惑。我会这样做:

(伪代码)

} 这样,在第一个之后总会有一个弹出窗口,或者您需要在适当的条件下将id重置为-1,或者添加mdgeorge建议的布尔值。但通常最好不要在鼠标函数中绘制东西。事情变得更容易控制。 编辑:我应该指出,也有内置和一些更多的检查参考

void setup() {
 // stuff
 }

    void draw()
{

if (id != -1)
  drawPopup(id);

}

void mouseReleased() //default method called when mouse is released
 {
 if (mouseButton == LEFT)
 id = geoMap.getID(mouseX, mouseY);
}

void drawPopup(int id){
 println(getCountryName(countryID, 3));

noStroke();
fill(255, 192);
rect(0, 0, width, 20);

if (countryID != -1)
{
  String name = getCountryName(id, 3);
  fill(0);
  textAlign(LEFT, CENTER);
  text(name, 0, 0, width, 20);
}