繁体   English   中英

如何在类构造函数中使用 JPopupMenu actionlistener?

[英]How can I use JPopupMenu actionlistener inside a class constructor?

我制作了一个 GUI,它有很多按钮执行完全相同的功能,所以我决定制作一个特殊的JButton类,它可以执行我想要的操作,其中包括一个JPopupMenu 但是,我不明白的showgetHeightgetWidth出现了一个错误:“ getHeight()方法对于 new ActionListener(){}类型未定义”和“ getWidth()方法对于 new ActionListener(){}类型未定义ActionListener(){} 。”

注意:我从JPopupMenu复制了代码; 我不知道它是如何工作的。

public class MyButton extends JButton {
    
    JPopupMenu menu = new JPopupMenu("Menu");
    //create menu item
    JMenuItem a = new JMenuItem("A");
    JMenuItem b = new JMenuItem("B");
    JMenuItem c = new JMenuItem("C");
    JMenuItem d = new JMenuItem("D");

    public MyButton() {
        super();
        
        menu.add(a);
        menu.add(b);
        menu.add(c);
        menu.add(d);
        
        this.addActionListener(new ActionListener() {
            
            @SuppressWarnings("deprecation")
            public void actionPerformed(ActionEvent ae) {
                menu.show(this, this.getWidth() / 2, this.getHeight() / 2); //here is the error 
            }
        });
    }
}

您正在创建的一个匿名实例ActionListener ,并尝试访问MyButton给你添加通过监听this -但是thisActionListener 您应该能够使用ActionEvent的源,但您需要对其进行转换。

JComponent source = (JComponent)ae.getSource();
menu.show(source, source.getWidth()/2, source.getHeight()/2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM