如果光标退出几秒钟,如何隐藏弹出窗口
我有一个 JDialog
作为弹出窗口,它显示 3 秒并丢弃。
它出现在光标位置,并且仅当光标退出弹出窗口时才必须进行处理。
如果光标进入弹出窗口,计时器将停止并在退出时重新启动。
但我的第一个想法是通过 MouseListener
启动和停止的 dispose-Timer
不适用于某些 JComponent
s,这会导致 mouseExited()
。
我的第二个想法永远不会启动计时器,
public void mouseExited( MouseEvent e ) {
if(!Popup.this.getBounds().contains( e.getLocationOnScreen() )){
timer.start();
}
}
我不想将侦听器添加到弹出窗口中的每个组件。
有没有一种简单的方法可以做到这一点。
例子:
public class Popup extends JDialog {
private static final long serialVersionUID = 1337L;
private final Timer timer = new Timer( 3000, new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
Popup.this.dispose();
System.exit( 0 );
}
});
public Popup() {
setBounds( 100, 100, 300, 300 );
addMouseListener( new PopupBehavior() );
getContentPane().setLayout( new BorderLayout() );
getContentPane().add( new JTextArea(), BorderLayout.NORTH );
getContentPane().add( new JSplitPane(0,new JPanel(), new JLabel("2")), BorderLayout.CENTER );
getContentPane().add( new JProgressBar(), BorderLayout.SOUTH );
getContentPane().add( new JLabel("west"), BorderLayout.WEST );
getContentPane().add( new JSpinner(), BorderLayout.EAST );
}
public static void main( String[] args ) {
SwingUtilities.invokeLater( new Runnable() {
@Override
public void run() {
new Popup().setVisible( true );
}
});
}
private class PopupBehavior extends MouseAdapter {
@Override
public void mouseEntered( MouseEvent e ) {
System.out.println("mouseEntered");
timer.stop();
}
@Override
public void mouseExited( MouseEvent e ) {
System.out.println("mouseExited");
timer.start();
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
从 jdk7 开始,您可以使用 JLayer 装饰容器,并在其 processMouseEvent 中停止/启动计时器。
对于旧版本,您可以使用 JXLayer 项目(这是当前开发的)或手动实现全局监听器,如 全局事件监听器
As of jdk7 you can decorate your container with a JLayer and stop/start the timer in its processMouseEvent
For older versions, you can use the layer from the JXLayer project (it's were the current was developed) or go for a manually implements global listener, as f.i. shown in Global Event Listeners
仅举个例子 JButton (据我所知,大多数
JComponents
) 具有Model
如果您从 Model 或从预定义中移出的鼠标启动
javax.swing.Timer
矩形
如果鼠标返回到预定义的
矩形
,则只需重新启动javax.swing.Timer
自从关于JToolTip 这里
just for example JButton (and as I know majorities of
JComponents
) hasModel
if you'll start
javax.swing.Timer
from Model or from mousemoved out from pre-definedRectangle
if mouse returns back to the pre-defined
Rectangle
then just restartjavax.swing.Timer
excelent sugestion since about JToolTip here