void eliminarDelContenedor() { for (int r = 0; r < layer.getComponentCount(); r++) { if (((Component) layer.getComponent(r)).hashCode() == this.glass.hashCode()) { layer.remove(r); } } }
public void init(Object parent) { glass = new BlurGlass(); glass.setLayout(null); this.setLayout(null); setOpaque(false); // getContentPane().setOpaque(false); this.getLayeredPane().setOpaque(false); this.getRootPane().setOpaque(false); // putClientProperty("Synthetica.opaque", Boolean.FALSE); JParent = parent; glass.setOpaque(false); MouseInputAdapter adapter = new MouseInputAdapter() {}; glass.addMouseListener(adapter); glass.addMouseMotionListener(adapter); try { if (parent instanceof JFrame) { layer = ((JFrame) parent).getLayeredPane(); } else if (parent instanceof JInternalFrame) { layer = ((JInternalFrame) parent).getLayeredPane(); } glass.setBounds(layer.getBounds()); } catch (NullPointerException err) { Dialogos.error("Error interno en Dialogo interno modal", err); } try { glass.add(this); layer.add(glass, JLayeredPane.DEFAULT_LAYER); } catch (NullPointerException err) { Dialogos.error("Error interno en dialogo modal interno", err); } }
public void setActivo(boolean val) { glass.setVisible(val); setVisible(val); JLayeredPane.getLayeredPaneAbove(glass).moveToFront(glass); if (val) { synchronized (syncMonitor) { try { if (SwingUtilities.isEventDispatchThread()) { EventQueue theQueue = getToolkit().getSystemEventQueue(); while (isVisible()) { AWTEvent event = theQueue.getNextEvent(); Object source = event.getSource(); if (event instanceof ActiveEvent) { ((ActiveEvent) event).dispatch(); } else if (source instanceof Component) { ((Component) source).dispatchEvent(event); } else if (source instanceof MenuComponent) { ((MenuComponent) source).dispatchEvent(event); } else { System.out.println("No se puede despachar: " + event); } } } else { while (isVisible()) { syncMonitor.wait(); } } } catch (InterruptedException ignored) { System.out.println("Excepción de interrupción: " + ignored.getMessage()); } } } else { synchronized (syncMonitor) { setVisible(false); glass.setVisible(false); syncMonitor.notifyAll(); eliminarDelContenedor(); } } }