1

私はプログラミングが初めてで、マインスイーパ GUI を作成しようとしています。JToggleButton を右クリックすると、ゲームは完全に機能し、ボタンに爆弾の「B」が表示されましたが、マウスリスナーで setText() を setIcon() に置き換えると、左クリックと右クリックの両方が発生したときにアイコンが表示されます。setText() のとき、この問題はありませんでした。

    public void mousePressed(MouseEvent e){
        if(e.isMetaDown())
            if(btnPresses == 0)
            {
                startTime = System.currentTimeMillis();
                btnPresses++;
            }
            //if(btn[y][x].getText().equals("B"))
            if(btn[y][x].getIcon()==flag)
            {
                //btn[y][x].setText("");
                btn[y][x].setIcon(null);
                if(bombs[y][x]!=BOMB)
                    markers++;
            }
            else
            {
                //btn[y][x].setText("B");
                btn[y][x].setIcon(flag);
                if(bombs[y][x]==BOMB)
                    markers++;
                else
                    markers--;
            }

アクションリスナーに btn[y][x].setIcon(null) を追加しました。これにより、左クリックしたときにフラグアイコンが短時間だけ表示されますが、まったく表示されないようにしたいです。

4

2 に答える 2

2

マウスの左ボタンのクリック (MouseEvent.BUTTON3) とマウスの右ボタンのクリック (MouseEvent.BUTTON3) を区別し、それに応じて動作する必要があります。たとえば、私がこのようなことをしたとき、次の方法でモデルに (MVC を使用して) 「フラグ」ブール値を設定しました。

@Override
public void mousePressed(MouseEvent e) {
   if (e.getButton() == MouseEvent.BUTTON3) {
      model.upDateButtonFlag();
   }
}

MouseListener は、フラグを設定または設定解除する場合にのみ使用してください。それ以外の場合は、左ボタンのクリックに対して ActionListener を介して JButton を応答させる必要があります。

于 2012-07-20T01:20:25.600 に答える
0

System.err.println("" + System.currentTimeMillis() + " " + e);ハンドラの先頭にa を追加します。1 回のクリックで複数のイベントが生成される可能性があるため、あなたのコードはあなたが思っているよりも多く呼び出されているのではないかと思います。何が起こっているのかがわかれば、簡単に修正できるはずです。

于 2012-07-20T01:00:36.353 に答える