2012-03-16 4 views
7

Estoy trabajando en Swing desde hace un tiempo pero nunca tuve una situación en la práctica cuando tuve que llamar al setEnabled(false) en JPanel. Aún así, veo ese código algunas veces en algunos gui sofisticados. Pero realmente no entiendo por qué alguien quiere usarlo? Así que, por favor dame algunos ejemplos de situaciones comunes de la vida real cuando necesitas usar setEnabled(false) en JPanel.Motivo de llamar a setEnabled (falso) en JPanel

También en javadoc que dice:

Desactivación de un componente no desactiva sus hijos.

en realidad tuve un error porque la tabla dentro de la deshabilitada JPanel no mostró el cursor del tamaño del mouse al cambiar el tamaño de las columnas. Sospecho que hay otras sorpresas desagradables aquí.

+0

creo que se puede desactivar una ventana de nivel superior de esta manera, pero no un recipiente –

+0

@Hovercraft completa de anguilas: JPanel todavía tiene tal método. Para mí, parece una fuente completamente inútil de posibles errores aquí. Pero tal vez estoy confundiendo y tiene un uso práctico para JPanel. – GrayR

+0

Trabajar con swing es como la muerte de mil cortes. Un método que no hace nada? ¿De Verdad? – gdbj

Respuesta

6

Una de las razones es que getEnabled() reflejará el estado correcto. Considere un caso donde algún controlador de eventos desea marcar el panel como no habilitado más y no es prudente en el momento del evento iterar e inhabilitar todos los componentes secundarios. Es posible que otras partes de la aplicación deban probar el estado del panel a través de getEnabled() al determinar qué hacer en diferentes puntos de la aplicación.

Yo personalmente nunca tuve que hacer esto, pero ahora que me lo pidió y me dio pensando que podría usar esto alguna vez. Gracias. & & + = 1 a la pregunta.

+0

Supongo que en caso de que deshabilite a todos los niños, este es un uso válido. De lo contrario, puede provocar errores similares a uno descrito en mi pregunta. Gran ejemplo por cierto. Es una pena que Swing no tenga manera de deshabilitar a todos los niños de un componente en una línea de código. – GrayR

+1

Un setEnabledAll() en una clase utils sería bastante fácil. Agregaré uno en caso de que alguien necesite ver cómo se haría. – Java42

+0

Un indicador de estado simple no tiene mucho valor sin el comportamiento deseado asociado. su 'setEnabledAll()' parece una extensión obvia a JPanel (o más generalmente a cualquier elemento de vista, como Component). Sigo encontrando rascadores de cabeza como este en Swing. – gdbj

5

Código de inicio para habilitar/deshabilitar todos los componentes en un contenedor.

JPanel p = new JPanel(); 
p.setEnabled(state); 
setEnabledAll(p, state); 

public void setEnabledAll(Object object, boolean state) { 
    if (object instanceof Container) { 
     Container c = (Container)object; 
     Component[] components = c.getComponents(); 
     for (Component component : components) { 
      setEnabledAll(component, state); 
      component.setEnabled(state); 
     } 
    } 
    else { 
     if (object instanceof Component) { 
      Component component = (Component)object; 
      component.setEnabled(state); 
     } 
    } 
}