Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I implemented a solution using <code>JXLayer</code> a little while ago, which uses it's lock effect capabilities to provide a "blocking" layer over the container.</p> <p>It's based on <a href="https://java.net/projects/jxlayer/" rel="nofollow">JXLayer 3.x</a> and uses the filters from <a href="http://www.jhlabs.com/" rel="nofollow">JHLabs</a> to generate it's "gray scale" effect</p> <pre><code>import com.jhlabs.image.GrayscaleFilter; import java.awt.BorderLayout; import java.awt.Component; import java.awt.LayoutManager; import java.awt.RenderingHints; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.swing.JComponent; import javax.swing.JPanel; import org.jdesktop.jxlayer.JXLayer; import org.jdesktop.jxlayer.QualityHints; import org.jdesktop.jxlayer.plaf.BetterBufferedImageOpEffect; import org.jdesktop.jxlayer.plaf.LayerUI; import org.jdesktop.jxlayer.plaf.ext.LockableUI; public class CoreXPane extends JPanel { private JXLayer&lt;JPanel&gt; layer; private FadedLockUI fadedLockUI; private JPanel pnlBody; public CoreXPane(LayoutManager layout) { super.setLayout(new BorderLayout()); super.addImpl(getLayer(), BorderLayout.CENTER, 0); setLayout(layout); } public CoreXPane() { this(new BorderLayout()); } @Override public void setEnabled(boolean enabled) { getLockUI().setLocked(!enabled); getBodyPane().setEnabled(enabled); super.setEnabled(enabled); } @Override protected void addImpl(Component comp, Object constraints, int index) { getBodyPane().add(comp, constraints, index); } @Override public void remove(int index) { getBodyPane().remove(index); } @Override public void removeAll() { getBodyPane().removeAll(); } protected FadedLockUI getLockUI() { if (fadedLockUI == null) { fadedLockUI = new FadedLockUI(); } return fadedLockUI; } @Override public void invalidate() { getLockUI().invalidate(); super.invalidate(); } @Override public void revalidate() { getLockUI().revalidate(); super.revalidate(); } @Override public void repaint() { getLockUI().repaint(); super.repaint(); } protected void getLayers(List&lt;LayerUI&gt; layers) { layers.add(getLockUI()); } protected JXLayer&lt;JPanel&gt; getLayer() { if (layer == null) { List&lt;LayerUI&gt; layers = new ArrayList&lt;LayerUI&gt;(4); getLayers(layers); JComponent wrapper = getBodyPane(); for (LayerUI ui : layers) { wrapper = new JXLayer(wrapper, ui); } layer = (JXLayer&lt;JPanel&gt;) wrapper; } return layer; } @Override public void setLayout(LayoutManager mgr) { getBodyPane().setLayout(mgr); } @Override public LayoutManager getLayout() { return getBodyPane().getLayout(); } public JPanel getBodyPane() { if (pnlBody == null) { pnlBody = new JPanel(); pnlBody.setLayout(new BorderLayout()); } return pnlBody; } @Override public void setOpaque(boolean isOpaque) { super.setOpaque(isOpaque); getBodyPane().setOpaque(isOpaque); } public static class FadedLockUI extends LockableUI { public static Map&lt;RenderingHints.Key, Object&gt; mapRenderHints = new QualityHints(); public FadedLockUI() { setLockedEffects(new BufferedImageOpEffect(new GrayscaleFilter())); mapRenderHints.put(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); // okay mapRenderHints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // bad mapRenderHints.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); // okay mapRenderHints.put(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE); mapRenderHints.put(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); mapRenderHints.put(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); mapRenderHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); } @Override protected Map&lt;RenderingHints.Key, Object&gt; getRenderingHints(JXLayer&lt;? extends JComponent&gt; l) { return mapRenderHints; } public void repaint() { setDirty(true); } public void invalidate() { setDirty(true); } public void revalidate() { setDirty(true); } } } </code></pre> <p>Take a look at <a href="https://weblogs.java.net/blog/alexfromsun/archive/2008/07/jxlayer_30_lock.html" rel="nofollow">LockableUI</a> for more details</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload