0

addButtonがブール値(クリックされた場合はtrue、クリックされていない場合はfalse)を返すようにすることで回避策を作成し、次のようにしました。if (addButton) { doSomething(); }

(申し訳ありませんが、タイトルは誤解を招く可能性があります。より良いタイトルを作ることができませんでした)

カスタムボタンを追加するこのメソッド(method1と呼びましょう。ループ内でも常に呼び出されます)を取得しました。そのボタンをクリックすると、指定されたメソッド(method2と呼びます)を1回だけ実行します。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;
        }

私の問題は、method2が常に呼び出され、その理由を理解していることですが、回避策はありますか?

4

3 に答える 3