如何制作像QQ那样具有“停靠”和“隐藏”功能的窗体?
给点思路~
我试过用MouseListener里面的mouseEntered和mouseExited不太好用啊
鼠标移动到窗体里面的组件上时竟然也会激发mouseExited事件。
有知道方法的给点意见,先谢谢啦

解决方案 »

  1.   

    要用SWING事件来做吧....
    不过我到时没有做过..
      

  2.   

    如果用swt,可以参考: http://www.eclipse.org/swt/widgets/.或者用limewire或azureus组件(需要jdk1.6或以上版本)
      

  3.   

    因为组件的鼠标离开事件是指当鼠标不在他的可视区域(被子组件覆盖也的算他的不可视区域)时就发生。
    你可以在他的鼠标进入和离开处判断一下鼠标是否还在整个面板的区域内, 做相应的处理。
    还有, 再加个互斥变量, 当鼠标离开整个面板后才改变其值。package com.biao;import java.awt.event.*;
    import javax.swing.*;public class Test01 extends JPanel {
        private static final long serialVersionUID = 8610818494539707828L;
        private JButton           button;
        private static int        counter          = 0;
        private boolean           show             = true;    public Test01() {
            button = new JButton("Button");
            this.add(button);        this.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseEntered(MouseEvent e) {
                    ++counter;
                    System.out.print("Mouse entered: " + counter);
                    if (!show) {
                        show = true;
                    }
                    System.out.println(", show " + show);
                }            @Override
                public void mouseExited(MouseEvent e) {
                    ++counter;
                    System.out.print("Mouse exited: " + counter + " "
                            + Test01.this.contains(e.getPoint()));
                    if (!Test01.this.contains(e.getPoint())) {
                        show = false;
                    }
                    System.out.println(", show " + show);
                }
            });
        }    private static void createGUIAndShow() {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(500, 500);        frame.getContentPane().add(new Test01());        frame.setVisible(true);
        }    public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    Test01.createGUIAndShow();
                }
            });
        }
    }
      

  4.   

    其实最主要的就是判断一下鼠标是否在整个面板内部, 理论上是得到整个面板的几何图形, 然后求出其屏幕坐标, 然后在取得鼠标的屏幕坐标, 再判断, 不过Swing组件的contains函数给我们做了这些事, 我们只需直接调用。
      

  5.   

    感谢 Inhibitory,我想我知道该怎么做了!