package net.vhati.modmanager.ui;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import java.awt.Window;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
* A panel that consumes all mouse/keyboard events, for use as a glass pane.
*/
public class InertPanel extends JPanel {
private KeyEventDispatcher nullDispatcher;
public InertPanel() {
super();
nullDispatcher = new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent( KeyEvent e ) {
Object source = e.getSource();
if ( source instanceof Component == false ) return false;
Window ancestor = SwingUtilities.getWindowAncestor( (Component)source );
if ( ancestor instanceof JFrame == false ) return false;
return ( InertPanel.this == ((JFrame)ancestor).getGlassPane() );
}
};
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed( MouseEvent e ) {e.consume();}
@Override
public void mouseReleased( MouseEvent e ) {e.consume();}
});
this.setCursor(Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR ));
this.setOpaque( false );
}
@Override
public void setVisible( boolean b ) {
super.setVisible( b );
if ( b ) {
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher( nullDispatcher );
} else {
KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher( nullDispatcher );
}
}
}