public void run() { User32 user = User32.INSTANCE; HWND hWnd = getHWnd(w); int flags = user.GetWindowLong(hWnd, WinUser.GWL_EXSTYLE); JRootPane root = ((RootPaneContainer)w).getRootPane(); JLayeredPane lp = root.getLayeredPane(); Container content = root.getContentPane(); if (content instanceof W32TransparentContentPane) { ((W32TransparentContentPane)content).setTransparent(transparent); } else if (transparent) { W32TransparentContentPane w32content = new W32TransparentContentPane(content); root.setContentPane(w32content); lp.add(new RepaintTrigger(w32content), JLayeredPane.DRAG_LAYER); } if (transparent && !usingUpdateLayeredWindow(w)) { flags |= WinUser.WS_EX_LAYERED; user.SetWindowLong(hWnd, WinUser.GWL_EXSTYLE, flags); } else if (!transparent && usingUpdateLayeredWindow(w)) { flags &= ~WinUser.WS_EX_LAYERED; user.SetWindowLong(hWnd, WinUser.GWL_EXSTYLE, flags); } setLayersTransparent(w, transparent); setForceHeavyweightPopups(w, transparent); setDoubleBuffered(w, !transparent); } });
public void setTransparent(boolean transparent) { super.setTransparent(transparent); if (!transparent) { disposeBackingStore(); } } protected void paintDirect(BufferedImage buf, Rectangle bounds) {
Container content = root.getContentPane(); if (content instanceof W32TransparentContentPane) { ((W32TransparentContentPane)content).setTransparent(transparent); new W32TransparentContentPane(content); root.setContentPane(w32content); lp.add(new RepaintTrigger(w32content),
@Override public void removeNotify() { super.removeNotify(); disposeBackingStore(); } @Override
public void removeNotify() { super.removeNotify(); disposeBackingStore(); } public void setTransparent(boolean transparent) {
@Override public void setTransparent(boolean transparent) { super.setTransparent(transparent); if (!transparent) { disposeBackingStore(); } } @Override