首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时使用ActionListener / MouseListener的JButton

问同时使用ActionListener / MouseListener的JButton
EN

Stack Overflow用户
提问于 2014-03-12 18:32:38
回答 4查看 20.9K关注 0票数 2

是否可以创建同时具有ActionListener和MouseListener的Jbutton

这意味着我创建了一个按钮,然后当我按下它(通过actionListener)时,它会改变框架,这样按钮被按下后,我就可以在框架上的任何地方按下,MouseListener就会被使用。

代码语言:javascript
复制
JButton button = new JButton();//Creates Button
button.addActionListener(new ActionListener() {         
public void actionPerformed(ActionEvent e) {
    //Insert MouseListener
    //Then do something with mouseListener
}
}); 

这是当前代码:但是,当我尝试单击按钮时,它们现在是同步的,并且我不能第二次调用mouseListener

代码语言:javascript
复制
    JButton button2 = new JButton("Click");
    button2.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            System.out.println("You clicked the button");
            newCube.stopCube();
        }

    });
    button2.addMouseListener(new java.awt.event.MouseAdapter()
    {
        public void mousePressed(java.awt.event.MouseEvent evt)
        {
            double x = evt.getX();
            double y = evt.getY();
            newCube.setCube(x,y);
        }
    });
EN

回答 4

Stack Overflow用户

发布于 2014-03-12 18:46:12

下面是向JFrame添加/删除MouseListener JToggleButton示例。

代码语言:javascript
复制
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JToggleButton;

public class Example extends JFrame {

    private MouseAdapter mouseListener;

    public Example(){
        init();
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    private void init() {
        mouseListener = new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                System.out.println("clicked");
            }
        };
        setLayout(new FlowLayout());
        JToggleButton b = new JToggleButton("add listener");
        b.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if(((JToggleButton)e.getSource()).isSelected()){
                    Example.this.addMouseListener(mouseListener);
                    ((JToggleButton)e.getSource()).setText("remove listener");
                } else {
                    Example.this.removeMouseListener(mouseListener);
                    ((JToggleButton)e.getSource()).setText("add listener");
                }
            }
        });
        add(b);
    }

    public static void main(String... s){
        new Example();
    }
}

编辑:使用JButton进行检查

代码语言:javascript
复制
public class Example extends JFrame {

    private MouseAdapter mouseListener;

    public Example(){
        init();
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    private void init() {
        mouseListener = new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                System.out.println("clicked");
            }
        };
        setLayout(new FlowLayout());
        JButton b = new JButton("add listener");
        b.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if(((JButton)e.getSource()).getText().equals("add listener")){
                    Example.this.addMouseListener(mouseListener);
                    ((JButton)e.getSource()).setText("remove listener");
                } else {
                    Example.this.removeMouseListener(mouseListener);
                    ((JButton)e.getSource()).setText("add listener");
                }
            }
        });
        add(b);
    }

    public static void main(String... s){
        new Example();
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-03-12 18:46:55

如果要通过单击来移动某物,可以直接在该节点上使用鼠标侦听器,而不是在按钮上使用它。

要在按钮上同时添加操作侦听器和鼠标侦听器,可以在按钮上使用addActionListener和addMouseListener方法。

有关这些方法的信息,请查看api ...http://docs.oracle.com/javase/7/docs/api/javax/swing/JButton.html

票数 0
EN

Stack Overflow用户

发布于 2014-03-12 18:53:45

如果我没理解错的话,这个示例可能会对您有所帮助(将此代码添加到您自己的ActionListener中)

代码语言:javascript
复制
@Override
public void actionPerformed(ActionEvent e) {
    ((JButton)e.getSource()).addMouseListener(yourMouseListener);
}

我试过了,很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22348685

复制
相关文章

相似问题

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