2014-09-19 58 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

相关问题