通过让addButton返回一个布尔值(在点击时为true,在没有时为false)做出一个解决方法然后我这样做了:if (addButton)
{
doSomething();
}
(对不起,标题可能会产生误导。无法弥补更好的头衔)
我得到了这个方法(让我们称之为method1,它也在循环中一直调用),它添加了一个自定义按钮,我希望该按钮(当点击时)运行指定的方法(让我们称之为方法2)只有一次。我希望method1可以在几个不同的类中使用,但是可以触发不同的操作。
public void addButton(Graphics2D g2d, int x, int y, AttributedCharacterIterator atstr, Method method)
{
BufferedImage img = Sprites.button;
x -=img.getWidth()/2;
y -=img.getHeight()/2;
int border = 10;
g2d.drawImage(img, null, x, y);
g2d.drawString(atstr, x + (img.getWidth()/2) - border, y + (img.getHeight()/2) + 10);
Rectangle getBounds = new Rectangle(x, y, img.getWidth(), img.getHeight());
if (MouseInput.getBounds().intersects(getBounds) && MouseInput.mouseClickedPressed == true)
{
try {
method.invoke(this);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
它被称为:
addButton(g2d, 200, 200, Template.atstr(g2d, "Siege!", Color.BLACK, "Times New Roman", 20, doSomething()));
public Method doSomething()
{
//Action.....
return null;
}
我的问题是方法2一直被调用,我已经想出了原因,但有什么方法吗?
答案 0 :(得分:0)
如果你只希望它被调用一次,你需要在第一次调用时设置为boolean invoked
的标志/字段true
,并防止以后被调用 - 只需写一些if :if(!invoked) { invoke... }
答案 1 :(得分:0)
我试图理解你的代码而失败了......
但是我相信我可以建议你创建特殊标志(例如buttonClicked
)。此变量的值为false
。
当用户点击按钮时,流程应该到达如下代码:
if (buttonClicked) {
return;
}
buttonClicked = true;
// do other stuff hrere
请不要忘记同步这段代码。否则,如果用户点击足够快,它可以同时执行。
答案 2 :(得分:0)
基本上你需要一个标志变量,它在方法2运行时设置。检查方法2 if(!flag) method2();