2009-08-18 11 views
7

Primero para describir el problema: Durante un re-diseño debido a un cambio en ancho o alto, ScrollPaneLayout de Java solicita el tamaño preferido de sus hijos ANTES de establecer los límites de su ventana gráfica. En los componentes de texto, llamar a getPreferredSpan puede cambiar el diseño, ya que getPreferredSpan llama a setSize internamente. El efecto es que ninguna vista (extendiendo javax.swing.text.View) puede recuperar el tamaño real de su Componente padre en esta situación. Un getVisibleRect fallará en esta situación ya que los límites de la ventana gráfica aún no están configurados. Comprobar la validez del componente de texto para bloquear el proceso de disposición no es una opción, ya que es valido en este escenario.¿Cómo obtener un rect visible correcto durante un validateTree?

Entonces, la pregunta es: ¿hay una posibilidad de averiguar si los límites de un JComponent están actualizados?

+0

no. idea ....: P – Epaga

+0

Lo siento, tampoco tengo idea. se agregó la etiqueta "swing" ... – MartinStettner

+0

Esta pregunta es muy confusa. ¿Lo limpiarías para nosotros? – marionmaiden

Respuesta

1

Quizás podría subclasificar ScrollPanel y establecer una propiedad personalizada como "com.mycompany.BoundsSet" en false cuando se invalide y establecerlo como verdadero cuando se establecen los límites. Luego, la vista puede verificar esta propiedad y si es falsa, revalidar el ScrollPanel y devolver el último tamaño conocido. Entonces, con suerte, el ScrollPane continuará y establecerá sus límites, luego el evento de revalidación se reducirá y la bandera se habrá borrado, lo que le permitirá confiar en los getBounds(). O algo así.

0

¿No puedes simplemente usar el método Component#isValid? Si el método devuelve verdadero, significa que el componente tiene el tamaño y la posición correctos dentro de su contenedor primario y todos sus elementos secundarios también son válidos.

Cuestiones relacionadas