| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 669 人关注过本帖
标题:一个代码显示效果不是所想要的,求助
只看楼主 加入收藏
shenyun345
Rank: 2
等 级:论坛游民
帖 子:32
专家分:10
注 册:2009-7-13
结帖率:50%
收藏
已结贴  问题点数:15 回复次数:4 
一个代码显示效果不是所想要的,求助
图形界面上有一个按钮,当鼠标移到按钮上时按钮掩藏,当鼠标离开按钮时按钮显示。下面是我的代码,不过不是我想要的效果,大侠们帮忙改正一下,最好是先说下思路,说一下我的思路为什么错了。
程序代码:
import java.awt.*;
import java.awt.event.*;
public class shu145_8 extends Frame implements WindowListener{
   Button b;
   Panel p;

 public shu145_8(String title){
   super(title);
   b=new Button("按钮");
   p=new Panel();
   p.add(b,"Center");
   add(p);
   addWindowListener(this);
   b.addMouseListener(new MouseHandler());
}
   public static void main(String args[]){
     shu145_8 me=new shu145_8("鼠标");
     me.setSize(200,200);
     me.setVisible(true);
}

 public void windowClosing(WindowEvent e){
   System.exit(0);  

 }

 public void windowClosed(WindowEvent e){}

 public void windowDeactivated(WindowEvent e){}

 public void windowActivated(WindowEvent e){}

 public void windowIconified(WindowEvent e){}

 public void windowDeiconified(WindowEvent e){}

 public void windowOpened(WindowEvent e){}
class MouseHandler implements MouseListener{

 public void mouseClicked(MouseEvent e){}

 public void mousePressed(MouseEvent e){}

 public void mouseReleased(MouseEvent e){}

 public void mouseExited(MouseEvent e){
        b.setVisible(true);
}

 public void mouseEntered(MouseEvent e){
         b.setVisible(false);
}
}
}
如果我在开始就按钮掩藏
b.setVisible(false);
然后再运行,效果是鼠标到按钮上就消失了,不过鼠标离开按钮时,按钮也不显示出来了,


搜索更多相关主题的帖子: 代码 效果 
2010-05-26 17:06
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:7 
程序代码:
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class shu145_8 extends Frame {
    Button b;
    Panel p;

    public shu145_8(String title) {
        super(title);
        this.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        b = new Button("按钮");
        p = new Panel();
        p.add(b, "Center");
        p.addMouseMotionListener(new MouseMotionAdapter(){
            public void mouseMoved(MouseEvent e) {
                // TODO Auto-generated method stub
                int y=b.getLocation().y;
                int x=b.getLocation().x;
                int ex = e.getPoint().x;
                int ey = e.getPoint().y;
                int bx = b.getPreferredSize().width;
                int by = b.getPreferredSize().height;
                if(ex>=x&&ey>=y&&ex<=x+bx&&ey<=y+by)
                    b.setVisible(false);
                else
                    b.setVisible(true);
            }});
        add(p);
        b.addMouseListener(new MouseAdapter(){
            public void mouseEntered(MouseEvent arg0) {
                b.setVisible(false);
            }
        });
    }

    public static void main(String args[]) {
        shu145_8 me = new shu145_8("鼠标");
        me.setSize(200, 200);
        me.setVisible(true);
    }
}

我没去查看源代码,不知道setVisible(false)是怎么实现的。不过感觉setVisible(false)后,按钮隐藏起来,其鼠标事件的操作范围也就消失了,再稍微移动一下,就触发了exit了,而exit后又触发了setVisible(false)。所以楼主的代码就会错误了。
2010-05-26 21:43
pigpigpigxk
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:26
专家分:109
注 册:2010-5-27
收藏
得分:7 
setvisible(false)就触发mouse exit啦。这样是不行的。
2010-05-27 00:44
shenyun345
Rank: 2
等 级:论坛游民
帖 子:32
专家分:10
注 册:2009-7-13
收藏
得分:0 
我有听说是awt不支持双缓冲,所以有闪屏的情况。
谢谢你们的解答,
2010-05-27 23:06
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:0 
就算你改成swing也是一样的,不知道这个题目怎么跟闪屏相关了
2010-05-28 09:46
快速回复:一个代码显示效果不是所想要的,求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036945 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved