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隐藏时是不会响应鼠标事件的。