2015-08-14 22 views
0

,并创建一个自定义的JButton /组件。我最什么,我需要的,只是我不知道该怎么称呼的actionPerformed我ActionListners。调用在学习的过程中,我一个ActionEvent

代码:

package myProjects; 

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Shape; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.geom.*; 
import java.util.ArrayList; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 

public class LukeButton extends JComponent{ 
    public static void main(String[] args){ 
     JFrame frame = new JFrame(); 
     frame.setTitle("Luke"); 
     frame.setSize(300, 300); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     LukeButton lb = new LukeButton(); 
     lb.addActionListener(e->{ 
      System.out.println("Success"); 
     }); 
     frame.add(lb); 

     frame.setVisible(true); 
    } 

private final ArrayList<ActionListener> listeners = new ArrayList<ActionListener>(); 

public LukeButton(){ 

} 
public void addActionListener(ActionListener e){ 
    listeners.add(e); 
} 
public void paintComponent(Graphics g){ 

    super.paintComponent(g); 

    Graphics2D g2 = (Graphics2D)g; 
    Shape rec = new Rectangle2D.Float(10, 10, 60, 80); 

    g2.setColor(Color.BLACK); 
    g2.setStroke(new BasicStroke(5)); 
    g2.draw(rec); 
    g2.setColor(Color.BLUE); 
    g2.fill(rec); 
} 
} 

有谁一个知道如何调用“听众”的ArrayList一旦按钮被点击?感谢您抽出时间。

回答

3

你需要循环在你的ActionListener S和列表调用它们actionPerformed方法,像...

protected void fireActionPerformed() { 
    if (!listeners.isEmpty()) { 

     ActionEvent evt = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "LukeButton"); 
     for (ActionListener listener : listeners) { 
      listener.actionPerformed(evt); 
     } 

    } 
} 

现在,您需要定义这可能会引发ActionEvent要发生的动作,鼠标点击,按键等,并呼叫,当他们发生

看一看How to Write a Mouse ListenerHow to Use Key Bindings更多细节

+0

感谢fireActionPerformed方法,帮助很大,I L赢得新的东西:) –