Hello!
Here is a basic idea (not complete)
You have your JDesktop where you put your inner frame.
You have a dummy glass panel to block the desktop.
Your glass panel is registred to your inner frame to block/unblock the desktop
public class MyPannel extends JDesktopPane
{
private JPanel main;
private DummyGlassPane glass;
private MyInternalFrame frame;
public MyPannel ()
{
....
frame.addInternalFrameListener(glass);
add(main, JLayeredPane.FRAME_CONTENT_LAYER, 1);
add(frame, JLayeredPane.POPUP_LAYER, 2);
public class DummyGlassPane extends JPanel implements InternalFrameListener
{
public DummyGlassPane()
{
this.setOpaque(false);
// block the desktop panel
addKeyListener(new KeyAdapter() { });
addMouseListener(new MouseAdapter() { });
super.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
}
public void internalFrameOpened(InternalFrameEvent e) {}
public void internalFrameClosed(InternalFrameEvent e) {}
public void internalFrameClosing(InternalFrameEvent e) {}
public void internalFrameIconified(InternalFrameEvent e) {}
public void internalFrameDeiconified(InternalFrameEvent e) {}
public void internalFrameActivated(InternalFrameEvent e)
{ // block the panel on inner frame popup
MyPannel.this.add(glass, JLayeredPane.MODAL_LAYER, 0);
}
public void internalFrameDeactivated(InternalFrameEvent e)
{ // unblock the panel on hidding the inner frame
MyPannel.this.remove(this);
}
}
}
Regards,
D.