Code
// menuItem.setMnemonic(KeyEvent.VK_1);
class ModalInternalFrameAction1 extends AbstractAction {
public ModalInternalFrameAction1(String label) {
super(label);
}
@Override public void actionPerformed(ActionEvent e) {
setJMenuEnabled(false);
JOptionPane.showInternalMessageDialog(
desktop, "information", "modal1", JOptionPane.INFORMATION_MESSAGE);
setJMenuEnabled(true);
}
}
// menuItem.setMnemonic(KeyEvent.VK_2);
class ModalInternalFrameAction2 extends AbstractAction {
private final JPanel glass = new MyGlassPane();
public ModalInternalFrameAction2(String label) {
super(label);
Rectangle screen = frame.getGraphicsConfiguration().getBounds();
glass.setBorder(BorderFactory.createEmptyBorder());
glass.setLocation(0, 0);
glass.setSize(screen.width, screen.height);
glass.setOpaque(false);
glass.setVisible(false);
desktop.add(glass, JLayeredPane.MODAL_LAYER);
}
@Override public void actionPerformed(ActionEvent e) {
setJMenuEnabled(false);
glass.setVisible(true);
JOptionPane.showInternalMessageDialog(
desktop, "information", "modal2", JOptionPane.INFORMATION_MESSAGE);
glass.setVisible(false);
setJMenuEnabled(true);
}
}
// menuItem.setMnemonic(KeyEvent.VK_3);
// Creating Modal Internal Frames -- Approach 1 and Approach 2
// http://web.archive.org/web/20090803142839/http://java.sun.com/developer/JDCTechTips/2001/tt1220.html
class ModalInternalFrameAction3 extends AbstractAction {
private final JPanel glass = new PrintGlassPane();
public ModalInternalFrameAction3(String label) {
super(label);
glass.setVisible(false);
}
@Override public void actionPerformed(ActionEvent e) {
JOptionPane optionPane = new JOptionPane();
JInternalFrame modal = optionPane.createInternalFrame(desktop, "modal3");
optionPane.setMessage("Hello, World");
optionPane.setMessageType(JOptionPane.INFORMATION_MESSAGE);
removeSystemMenuListener(modal);
modal.addInternalFrameListener(new InternalFrameAdapter() {
@Override public void internalFrameClosed(InternalFrameEvent e) {
glass.removeAll();
glass.setVisible(false);
}
});
glass.add(modal);
modal.pack();
getRootPane().setGlassPane(glass);
glass.setVisible(true);
modal.setVisible(true);
}
}
References