首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >右键单击JButton

右键单击JButton
EN

Stack Overflow用户
提问于 2010-01-05 21:12:05
回答 6查看 26.3K关注 0票数 18

我正试着用Java写一个扫雷克隆,这很有趣。我有一个JButtons网格,我将更改其标签以表示危险计数、标志等。

我的问题是,我不知道如何用鼠标右键点击JButton来按下按钮。我做了以下工作:

代码语言:javascript
复制
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上。

编辑:这是我根据公认的答案制定的解决方案:

代码语言:javascript
复制
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);

Minesweeper clone http://grab.by/1y9z

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-05 22:42:00

无法通过右键单击来按下按钮。向你的鼠标监听器添加这样的代码行

mousePressed:

代码语言:javascript
复制
if(isRightButtonPressed) {underlyingButton.getModel().setPressed(true));

mouseReleased:

代码语言:javascript
复制
if(needReset) {underlyingButton.getModel().setPressed(false));

或者在那里做任何想做的事。

票数 5
EN

Stack Overflow用户

发布于 2010-01-06 06:05:31

只有一个小补充:检查正确按钮的最简单方法是SwingUtilities.isRightMouseButton

票数 2
EN

Stack Overflow用户

发布于 2010-01-05 21:17:52

MouseEvent具有一些属性

代码语言:javascript
复制
static int BUTTON1
static int BUTTON2
static int BUTTON3

在其他方面。当你的事件触发时,检查它们。

编辑

公共int getButton()

代码语言:javascript
复制
Returns which, if any, of the mouse buttons has changed state. 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2006188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档