使您的类成为Java中的事件源

时间:2010-05-24 18:18:26

标签: java awt actionlistener

我在Java中创建了一个自定义按钮,它有两个状态:mousePressed和mouseReleased。同时,如果我想重用这个按钮,以便其他事件监听器可以注册它,这些是我应该做的适当步骤(这是一个新的任务,所以尽管可以使用JButton,我想我们正在尝试表明我们可以像JButton一样创建自己的Button:

  • 覆盖addActionListener(ActionListener操作)
  • 覆盖removeActionListener(ActionListener操作)
  • 有一个私有变量,如List list = new List(),用于跟踪何时添加事件以及某种带有for循环的函数来运行所有操作。以下是我到目前为止的情况:

    公共类CustomButton     {         public static void main(String [] args)         {             EventQueue.invokeLater(new Runnable()             {                 public void run()                 {                     CustomButtonFrame frame = new CustomButtonFrame();                     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                     frame.setVisible(真);                 }             });         }

        public void addActionListener(ActionListener al)
        {
            listenerList.add(al);
        }
    
        public void removeActionListener(ActionListener al)
        {
            listenerList.remove(al);
        }
    
        private void notifyListeners()
        {
            for (ActionListener action : listenerList) {
                action.actionPerfomed();
            }
        }
    
        List<ActionListener> listenerList = new ArrayList<ActionListener>();
    }
    

我遇到编译错误:第38行:对List的引用不明确,java.util中的类java.util.List和java.awt中的类java.awt.List匹配List listenerList = new ArrayList() ;

和第34行:在java.awt.event.ActionListener接口中找不到符号,方法actionPerfomed()action.actionPerformed();

2 个答案:

答案 0 :(得分:1)

不,完全没有!

JButton拥有您需要的一切。只需将自己的监听器添加到按钮即可。不要覆盖某些东西。就像这样:

public class MyButton extends JButton implements MouseListener // maybe you want to add other listeners... separate them with comma's.
{
     public MyButton(String caption)
     {
         super(caption);
         addMouseListener(this);
     }

     // implement your listener methods here

}

答案 1 :(得分:0)

  

我正在用Java制作一个自定义按钮   有两种状态,mousePressed和   的mouseReleased

也许您应该使用JToggleButton