Hola.
En ocasiones sucede que necesitamos deshabilitar todos los componentes de un JPanel o un JFrame por alguna razón. Además tenemos botones, etiquetas, sliders, cajas de texto... y tenemos que hacer por cada componente setEnable(true/false), pero como buenos programadores esa opción no nos agrada, así que buscamos y el buen Google nos da la solución rápidamente:
esto lo que hace es sobreescribir el método setEnabled() del componente de tal forma que cuando se llame al método primero se activará/desactivará el propio componente y posteriormente habilita/deshabilita todos los componentes en él con la llamada a setComponentsEnabled.
Pero esto de pegar el par de métodos en cada componente como que no parece lo mejor, porque no mejor hacer lo siguiente:
y listo.
SwingUtils.java
En ocasiones sucede que necesitamos deshabilitar todos los componentes de un JPanel o un JFrame por alguna razón. Además tenemos botones, etiquetas, sliders, cajas de texto... y tenemos que hacer por cada componente setEnable(true/false), pero como buenos programadores esa opción no nos agrada, así que buscamos y el buen Google nos da la solución rápidamente:
@Override public void setEnabled(boolean en) { super.setEnabled(en); setComponentsEnabled(this, en); }
private void setComponentsEnabled(java.awt.Container c, boolean en) { Component[] components = c.getComponents(); for (Component comp: components) { if (comp instanceof java.awt.Container) setComponentsEnabled((java.awt.Container) comp, en); comp.setEnabled(en); } }
esto lo que hace es sobreescribir el método setEnabled() del componente de tal forma que cuando se llame al método primero se activará/desactivará el propio componente y posteriormente habilita/deshabilita todos los componentes en él con la llamada a setComponentsEnabled.
Pero esto de pegar el par de métodos en cada componente como que no parece lo mejor, porque no mejor hacer lo siguiente:
public static void setEnableContainer(Container c, boolean band) { Component[] components = c.getComponents(); c.setEnabled(band); for(int i = 0; i < components.length; i++){ components[i].setEnabled(band); if(components[i] instanceof Container){ setEnableContainer((Container)components[i], band); } } }así podemos dejar el método digamos en una clase SwingUtils y cuando necesitemos habilitar/deshabilitar un componente y todos sus hijos únicamente haríamos una llamada así:
SwingUtils.setEnableContainer(miComponente, true); SwingUtils.setEnableContainer(miComponente, false);
y listo.
SwingUtils.java