У меня есть JDialog
как всплывающее окно, которое появляется на 3 секунды и удаляется.
Он появляется в позиции курсора и должен располагаться, только если курсор выходит из всплывающего окна.
Если курсор вошел во всплывающее окно, таймер останавливается и запускается снова при выходе.
Но моя первая идея с dispose- Timer
, который запускается и останавливается через MouseListener
, не работает с некоторыми 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();
}
}
}