2014-09-19 61 views
-1

我正在做Head First Java中詳細介紹的double actionlistener練習,並瞭解內部類,但由於某種原因,我的代碼沒有編譯。當我嘗試爲JButton調用addActionListener方法時,我得到的參數無效錯誤。爲什麼我不能在兩個內部類上實現兩個ActionListener?

TwoButtons.java:

import javax.swing.*; 
import java.awt.*; 

public class TwoButtons { 
    JFrame frame; 
    JLabel label; 

    public static void main(String[] args){ 
     TwoButtons gui = new TwoButtons(); 
     gui.go(); 
    } 

    public void go(){ 
     frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JButton labelButton = new JButton("Change Label"); 
     labelButton.addActionListener(new LabelListener()); 

     JButton colorButton = new JButton("Change circle"); 
     colorButton.addActionListener(new ColorListener()); 

     label = new JLabel("I'm a label"); 
     MyDrawPanel drawPanel = new MyDrawPanel(); 

     frame.getContentPane().add(BorderLayout.SOUTH, colorButton); 
     frame.getContentPane().add(BorderLayout.CENTER, drawPanel); 
     frame.getContentPane().add(BorderLayout.EAST, labelButton); 
     frame.getContentPane().add(BorderLayout.WEST, label); 

     frame.setSize(300,300); 
     frame.setVisible(true); 

    } 

    class LabelListener implements ActionListener{ 
     public void actionPerformed(ActionEvent event){ 
      label.setText("OUch!"); 
     } 
    }//close inner class 

    class ColorListener implements ActionListener{ 
     public void actionPerformed(ActionEvent event){ 
      frame.repaint(); 
     } 
    } //close inner class 

} 

MyDrawPanel.java:(沒有錯誤)

import java.awt.*; 
import javax.swing.*; 


public class MyDrawPanel extends JPanel{ 
    public void paintComponent(Graphics g){ 
     Graphics2D g2d = (Graphics2D) g; 

     int red = (int)(Math.random()*255); 
     int green = (int)(Math.random()*255); 
     int blue = (int)(Math.random() * 255); 
     Color startColor = new Color(red,green,blue); 

     red = (int)(Math.random()*255); 
     green = (int)(Math.random()*255); 
     blue = (int)(Math.random() * 255); 
     Color endColor = new Color(red, green, blue); 

     GradientPaint gradient = new GradientPaint(70,70, startColor, 150,150, endColor); 
     g2d.setPaint(gradient); 
     g2d.fillOval(70, 70, 100, 100); 

    } 

} 
+0

你能分享確切的錯誤嗎? – Mureinik 2014-09-19 17:16:14

回答

2

您需要導入ActionEventActionListener

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

他們住java.awt.event.*下和而不是java.awt.*

如果您使用Eclipse之類的IDE,則可以通過簡單的操作輕鬆導入所有需要的類。

+0

教我使用IDE,並在測試SO代碼時自動使用「組織導入」。一切正常。 – 2014-09-19 17:20:00

+0

好的,所以*只包括直接的孩子進口,而不僅僅是awt中的所有東西?很高興知道,謝謝! 我正在使用eclipse,我需要做什麼簡單的操作? – 2014-09-19 17:28:01

+0

這是一個很好的做法,顯式導入你需要的各個類(請參閱[本文])(http://stackoverflow.com/questions/147454/why-is-using-a-wild-card-with-a-java-進口語句壞))。在Eclipse中,Windows上的快捷鍵是Ctrl + Shift + O。 – manouti 2014-09-19 17:29:36

相關問題