如何用java实现类似QQ自动隐藏窗体的功能

qusic 2008-04-27 11:28:12
如何制作像QQ那样具有“停靠”和“隐藏”功能的窗体?
给点思路~
我试过用MouseListener里面的mouseEntered和mouseExited不太好用啊
鼠标移动到窗体里面的组件上时竟然也会激发mouseExited事件。
有知道方法的给点意见,先谢谢啦
...全文
350 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘葛曦 2008-12-16
  • 打赏
  • 举报
回复
你这个不性
Inhibitory 2008-04-28
  • 打赏
  • 举报
回复
其实最主要的就是判断一下鼠标是否在整个面板内部, 理论上是得到整个面板的几何图形, 然后求出其屏幕坐标, 然后在取得鼠标的屏幕坐标, 再判断, 不过Swing组件的contains函数给我们做了这些事, 我们只需直接调用。
Inhibitory 2008-04-28
  • 打赏
  • 举报
回复
因为组件的鼠标离开事件是指当鼠标不在他的可视区域(被子组件覆盖也的算他的不可视区域)时就发生。
你可以在他的鼠标进入和离开处判断一下鼠标是否还在整个面板的区域内, 做相应的处理。
还有, 再加个互斥变量, 当鼠标离开整个面板后才改变其值。

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();
}
});
}
}

aoyihuashao 2008-04-28
  • 打赏
  • 举报
回复
MARK 学习。
masse 2008-04-28
  • 打赏
  • 举报
回复
如果用swt,可以参考: http://www.eclipse.org/swt/widgets/.

或者用limewire或azureus组件(需要jdk1.6或以上版本)

chenhongxin 2008-04-28
  • 打赏
  • 举报
回复
要用SWING事件来做吧....
不过我到时没有做过..
小宏 2008-04-28
  • 打赏
  • 举报
回复
顶一下!!!
qusic 2008-04-28
  • 打赏
  • 举报
回复
感谢 Inhibitory,我想我知道该怎么做了!
sunyujia 2008-04-27
  • 打赏
  • 举报
回复
总有个先后顺序吧,只有个互斥变量就可以了.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧