加入事件监视器,一个简单例子:import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;class MinFrame {
public static void main(String[] args) {
final JFrame frame=new JFrame();
frame.setSize(300,300);
frame.show();
JPanel testPanel=new JPanel();

Container contentPanel=frame.getContentPane();
contentPanel.add(testPanel);
testPanel.addMouseListener(new MouseLister(testPanel));

frame.addWindowListener(new WindowAdapter(){


public void windowClosing(WindowEvent e) {

System.exit(0);

}


}

);
}


}
class MouseLister implements MouseListener{
private JPanel parent;
private Color clickColor=Color.green;
private Color releasedkColor=Color.red;

MouseLister(JPanel parent){
this.parent=parent;
}
    public void mouseClicked(MouseEvent e){    }
    public void mousePressed(MouseEvent e){
         parent.setBackground(clickColor);
    
    }    public void mouseReleased(MouseEvent e){
     parent.setBackground(releasedkColor);
    }    public void mouseEntered(MouseEvent e){}    public void mouseExited(MouseEvent e){}
}

解决方案 »

  1.   

    TO: topirol(我爱学习)
    这个例子添加的事件处理是在单独一个类中,不像JButton那样直接在JFrame中处理,
    如:
    button1.addActionListener(new ActionListener()
    { public void actionPerformed(ActionEvent e)
    { doNewFileClick(); }});如果像你上面的做法的话,JFrame的东西要和MyPanel进行交互该如何做?
      

  2.   

    在你的MyPanel类的构造函数中提供JFrame的参数接入,类似如下:public class MyPanel extends JPanel{
    private JFrame frame;
    ...public MyPanel(){
     super();
    }public MyPanel(JFrame frame){
     super();
     this.frame = frame;
    }public void doSomething(){
     //这儿就可以使用JFrame了:~)
    }}不知是否理解了楼主的意思。
      

  3.   

    错了:~)在你的MyPanel事件监听类的构造函数中提供JFrame的参数接入,类似如下:public class MyPanelListener implements MouseListener{
    private JFrame frame;
    ...public MyPanelListener (){
     super();
    }public MyPanelListener (JFrame frame){
     super();
     this.frame = frame;
    }public void doSomething(){
     //这儿就可以使用JFrame了:~)
    }}呵呵:~)有意思。写完了,才发现与topirol(我爱学习) 君一个意思!
      

  4.   

    呵呵,TO楼主,MouseLister(JPanel parent)的参数你可以根据需要改的嘛,你把MouseLister(JPanel parent)改成MouseLister(JFrame parent)和private JPanel parent;改成private JFrame parent;就可以了
      

  5.   

    但如果传入的JFrame对象有其它的自定义方法呢?该如何调用?
    因为它们不是JFrame的方法,所以会编译失败。
    我刚学JAVA不久,不太习惯JDK的东西。