Java MouseListener

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JFrame;


public class MainFrame extends JFrame {
    public MainFrame(){
        final JButton btn = new JButton("把鼠标放上去出现。。");
        btn.setPreferredSize(new Dimension(200,20));
        btn.setLocation(100, 100);
        btn.setVisible(false);
        btn.addMouseListener(new MouseListener(){

            @Override
            public void mouseClicked(MouseEvent arg0) {
                // TODO Auto-generated method stub
                
            }

            @Override
            public void mouseEntered(MouseEvent arg0) {
                // TODO Auto-generated method stub
                btn.setVisible(true); //按钮可见
            }

            @Override
            public void mouseExited(MouseEvent arg0) {
                // TODO Auto-generated method stub
                btn.setVisible(false);//按钮不可见
            }

            @Override
            public void mousePressed(MouseEvent arg0) {
                // TODO Auto-generated method stub
                
            }

            @Override
            public void mouseReleased(MouseEvent arg0) {
                // TODO Auto-generated method stub
                
            }
            
            
            
        });
        this.setLayout(new FlowLayout(FlowLayout.CENTER));
        this.add(btn);
        this.setBounds(300, 300, 300, 300);
        this.setVisible(true);
        this.validate();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

这类实现的是当鼠标放在按钮上时,按钮出现,移走是隐藏,可是运行起来不是这样的??鼠标移上去没有反应??

 

[code="java"]
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

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

public class MainFrame extends JFrame {
public MainFrame() {
final JButton btn = new JButton("把鼠标放上去出现。。");
btn.setPreferredSize(new Dimension(200, 20));
btn.setLocation(100, 100);

    this.addMouseMotionListener(new MouseMotionListener() {

        @Override
        public void mouseMoved(MouseEvent e) {
            Rectangle bound = btn.getBounds();
            int x = e.getX();
            int y = e.getY()-30;
            if (bound.contains(x, y)) {
                btn.setVisible(true); // 按钮可见
            } else {
                btn.setVisible(false);
            }

        }

        @Override
        public void mouseDragged(MouseEvent e) {

        }
    });

    this.setLayout(new FlowLayout(FlowLayout.CENTER));
    this.add(btn);
    this.setBounds(300, 300, 300, 300);
    this.setVisible(true);
    this.validate();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    btn.setVisible(false);
}

public static void main(String[] args) {
    new MainFrame();
}

}[/code]

同样的效果,不同的实现。
你那个之所以不行估计是因为button不显示时是不会响应鼠标事件的

[code="java"]btn.addMouseListener(new MouseListener(){ [/code]

改成

[code="java"]this.addMouseListener(new MouseListener(){ [/code]

[code="java"]
package com.chinahrt.zyn.iteye;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

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

public class MainFrame extends JFrame {
public MainFrame(){
final JButton btn = new JButton("把鼠标放上去出现。。");
btn.setPreferredSize(new Dimension(200,40));
btn.setLocation(100, 100);
btn.setVisible(true);
btn.addMouseListener(new MouseListener(){

        public void mouseClicked(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }


        public void mouseEntered(MouseEvent arg0) {
            // TODO Auto-generated method stub
            btn.setVisible(false); //按钮可见
        }


        public void mouseExited(MouseEvent arg0) {
            // TODO Auto-generated method stub
            btn.setVisible(true);//按钮不可见
        }


        public void mousePressed(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }

        public void mouseReleased(MouseEvent arg0) {
            // TODO Auto-generated method stub

        }



    });
    this.setLayout(new FlowLayout(FlowLayout.CENTER));
    this.add(btn);
    this.setBounds(300, 300, 300, 300);
    this.setVisible(true);
    this.validate();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args){
    MainFrame m = new MainFrame();
}

}

[/code]
,btn初始化的时候不可见,frame在创建完成的时候还没有给它分配布局,就不知道鼠标在什么位置才算是在btn上。先让显示,鼠标放上隐藏,移开显示,完全没问题。

@chen_yongkai 正解。button隐藏时是不会响应鼠标事件的。