質問

うことにより書掃海艇のクローンのJavaしたものとみなされます。私はグリッドのJButtonsをラベルに変えていくの危険をカウント、フラグ。

私の問題が、わからないか、右クリックし、JButtonへの下押しボタンを押します。もちろん、以下の

button.addMouseListener(new MouseAdapter(){
    public void mouseClicked(MouseEvent e){
        boolean mine = field.isMine(x, y);
        if (e.isPopupTrigger()) {
            button.setText("F");
        }
        else {
            if (mine) {
                button.setText("X");
            }
        }
    }
});

こるという作業ですので、の"F"は、の"X"の部分。よりも重要なのはな押しボタンを押します。

編集:Macてポップアップトリガー起こるためmousePressはmouseClick.

編集:この溶液また、メールにてお知らせしの受け答え:

button.addMouseListener(new MouseAdapter(){
            boolean pressed;

            @Override
            public void mousePressed(MouseEvent e) {
                button.getModel().setArmed(true);
                button.getModel().setPressed(true);
                pressed = true;
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                //if(isRightButtonPressed) {underlyingButton.getModel().setPressed(true));
                button.getModel().setArmed(false);
                button.getModel().setPressed(false);

                if (pressed) {
                    if (SwingUtilities.isRightMouseButton(e)) {
                        button.setText("F");
                    }
                    else {
                        button.setText("X");
                    }
                }
                pressed = false;

            }

            @Override
            public void mouseExited(MouseEvent e) {
                pressed = false;
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                pressed = true;
            }                    
        });
        add(button);

掃海艇のクローンhttp://grab.by/1y9z

役に立ちましたか?

解決

ボタンを右クリックで押圧することはできません。あなたのマウスリスナーに、このような行を追加します。

のmousePressedます:

if(isRightButtonPressed) {underlyingButton.getModel().setPressed(true));

のmouseReleasedます:

if(needReset) {underlyingButton.getModel().setPressed(false));

やそこに行うものは何でもしたい。

他のヒント

私はisPopupTriggerを使用せず、直接、右のボタンをチェックしません。

button.addMouseListener(new MouseAdapter(){
  public void mouseClicked(MouseEvent e){
    boolean mine = field.isMine(x, y);
    if (e.getButton() == MouseEvent.BUTTON2) {
      button.setText("F");
    }
  ...

ただ、小さな加え:右ボタンをチェックする最も簡単な方法はSwingUtilities.isRightMouseButtonである

ます。http:// javaのsun.comの/ J2SE / 1.4.2 /ドキュメント/ API /のJava / AWT /イベント/ MouseEvent.htmlする

のMouseEventは、いくつかの特性を有している。

static int BUTTON1
static int BUTTON2
static int BUTTON3

他の中。これらをチェックしたときに、あなたのイベントが発生します。

EDIT

  

公共のint getButton()

Returns which, if any, of the mouse buttons has changed state. 

ているかを確認"mousePressed"解決のですか?のJavadocの isPopupTrigger っているとのこ

公boolean isPopupTrigger()
...
注意:ポップアップメニューが起の異なるシステム。そのため、isPopupTriggerの確認が必要となり両方のmousePressed、mouseReleasedのための適切なクロスプラットフォームの機能。

セクションを参照してください マウスリスナー API るドキュメンテーションシステム スイング barcode.net(日本語版)がバージョン

右クリックで目に見えて落ち込んでいるボタンは、ボタンの「正常な」行動の一部ではありません。あなたはそれがJToggleButtonsを使用して、またはマウスの右ボタンを押している間だけで、ボタンの背景色と、おそらく境界線を変更偽物にできる可能性があります。

あなたはイベントが正しくトリガされることが確実な場合(FTWデバッグ!)とbutton.setText(「F」)が起こっていること、そしておそらくあなたは、単に再描画する必要があります。

ボタンを再描画します。 のhttp:/ /java.sun.com/javase/6/docs/api/javax/swing/JComponent.html#repaint(java.awt.Rectangle)

このは、Mac上の罰金私のために動作します:

import java.awt.event.*;
import javax.swing.*;

public class ButtonTest extends JFrame {

    JButton button;

    public ButtonTest() {
        button = new JButton("W");
        button.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (e.getButton() == 3) { // if right click
                    button.setText("F");
                    button.getModel().setPressed(false);
                    // button.setEnabled(true);
                } else {
                    button.setText("X");
                    button.getModel().setPressed(true);
                    // button.setEnabled(false);
                }
            }
        });
        this.add(button);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        new ButtonTest();
    }

}

あなたにもe.getButton()== 2をチェックかもしれませんが、私はこの1つは、Mac上でトリガされたときに知りません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top