鼠标监听器不起作用的问题

下面这个代码不知道为什么鼠标监听器的动作实现不了。。。在线等!
package J_Fram;

import javax.swing.JButton;
import javax.swing.JFrame;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class J_Frame_MouseLisenter extends MouseAdapter{

JFrame f;
JButton red,blue,yellow;

public J_Frame_MouseLisenter() {
    // TODO Auto-generated constructor stub
    f = new JFrame("鼠标事件");
    f.setLayout(new FlowLayout());
    f.setBounds(400, 200, 300, 250);

    red = new JButton("红色");
    red.addMouseListener(this);
    f.add(red);
    f.setVisible(true);
}

@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub
    f.setBackground(Color.RED);
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    J_Frame_MouseLisenter t= new J_Frame_MouseLisenter();
}

}

@Override
public void mouseClicked(MouseEvent e){//这个才是鼠标点击事件
red.setBackground(Color.red);
f.getContentPane().setBackground(Color.blue);
}
调用JFrame或者Frame的 setBackground(Color color)方法设置后显示出来的颜色。其实,你的想法是正确的,但是我想提醒你的是,你没搞明白JFrame的显示机制。在你直接调用这个方法后,你的确设置了背景颜色,而你看到的却不是直接的JFrame或者Frame,而是JFrame.getContentPane().而JFrame上的contentPane默认是Color.WHITE的,所以,无论你对JFrame或者Frame怎么设置背景颜色,你看到的都只是contentPane

通过jpanel设置
 import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class J_Frame_MouseLisenter extends MouseAdapter{
JFrame f;
JButton red,blue,yellow;
JPanel jp;

public J_Frame_MouseLisenter() {
    // TODO Auto-generated constructor stub
    f = new JFrame("鼠标事件");
    f.setLayout(new FlowLayout());
    f.setBounds(400, 200, 300, 250);
    jp=new JPanel(); //加上这句
    f.add(jp);//加上这句
    red = new JButton("红色");
    red.addMouseListener(this);
    jp.add(red);
    f.setVisible(true);
}

@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub
    jp.setBackground(Color.RED);
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    J_Frame_MouseLisenter t= new J_Frame_MouseLisenter();
}
}

监听事件不应该写在监听器里吗

丵鹰的答复是比较全面的,不过默认的背景色不是白色的,是灰色的,这个没有多少问题。
虽然你设置了JFrame的background,但是因为不透明,你看不到。

谢谢你们的帮助,我搞懂啦~

@Override
public void mouseClicked(MouseEvent e){//这个才是鼠标点击事件
red.setBackground(Color.red);
f.getContentPane().setBackground(Color.blue);
}