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