2014-12-07 94 views
3

我一直在努力了一個多小時,以測試一個簡單的程序來改變點擊一個球的顏色,當我嘗試myPanel.addActionListener(new BallListener()),我在編譯時得到一個錯誤無法將ActionListener添加到JPanel?

請幫我找到這個錯誤?

myPanel.addActionListener(new BallListener()); 
    ^
    symbol: method addActionListener(Ball.BallListener) 
    location: variable myPanel of type MyPanel 
1 error 





//first Java Program on the new VM 
    import java.awt.*; 
    import javax.swing.*; 
    import java.awt.event.*; 
    import java.awt.geom.*; 
    import java.util.*; 

    public class Ball{ 

    private MyFrame myFrame; 
    private MyPanel myPanel; 

    public static void main(String[] args) 
    { 
    Ball ball=new Ball(); 
    ball.go(); 

    }//main ends 

    public class BallListener implements ActionListener{ 

    public void actionPerformed(ActionEvent e) 
    { 
    myFrame.repaint(); 
    } 

    }//listener ends 

    public void go() 
    { 

    myPanel=new MyPanel(); 
    //myPanel.addActionListener(new BallListener()); 
    myFrame=new MyFrame(); 
    myFrame.add(BorderLayout.CENTER,myPanel); 
    myFrame.setVisible(true); 
    } 

    }//class ends 



    //ball panel 
    class MyPanel extends JPanel 
    { 
    public void paintComponent(Graphics g) 
    { 
    Graphics2D g2d=(Graphics2D)g; 
    Ellipse2D ellipse=new Ellipse2D.Double(200,200,400,400); 
    int r=(int)Math.random()*256; 
    int b=(int)Math.random()*256; 
    int g1=(int)Math.random()*256; 
    Color color=new Color(r,g1,b); 
    g2d.setPaint(color); 
    g2d.fill(ellipse); 
    } 
    }//Class ends 

    //a simple JFrame 
    class MyFrame extends JFrame{ 

    public MyFrame() 
    { 
    setSize(600,600); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setResizable(false); 
    } 
    }//class ends 
+1

_action_做你認爲一個面板提供?面板根本不提供任何操作,因此不接受'ActionListener'。所以沒有'addActionListener'方法。 – Seelenvirtuose 2014-12-07 16:45:33

回答

4

JPanel■不要支持ActionListener因爲他們沒有一個自然的動作。對於按鈕,自然的動作是點擊它們,所以有一個ActionListener點擊時會觸發。 JPanel s不是按鈕。

如果要檢測JPanel上的點擊,則需要添加MouseListener而不是ActionListener

1

的面板事件,你可以使用的WindowListener說的覆蓋WindowsClosing方法,不使用等 ActionListener的一幀或面板等