2012-09-10 14 views
5

Resumen: Estoy buscando una forma de configurar el generador de código de Eclipse Window Builder para colocar sus referencias de objeto en el cuerpo de clase en lugar de localmente en el método initalize() .Controlando dónde se ubican referencias a objetos GUI creados por Eclipse Window Builder

detallada:

constructor de ventanas ha construido en un generador de código/analizador de código que puede generar código de interfaz gráfica de usuario de una 'forma gráfica de diseño' y viceversa. Es de gran utilidad diseñar GUI rápidamente y aprender cómo funcionan los diversos frameworks en Java (especialmente para principiantes java). Sin embargo, tengo problemas para usar el código generado en mi diseño cuando avance hacia configuraciones de GUI más sofisticadas. El problema es que la mayor parte del código generado se ubica dentro del método initialize() que hace que los objetos residan en el ámbito local y sean difíciles de obtener referencias del 'exterior'.

Hasta ahora he estado copiar/pegar las declaraciones de tipo del método de initialize() en el cuerpo de la clase manualmente como público tenga acceso a ellos, pero esto parece de alguna manera el enfoque equivocado. Funciona bien siempre que no reorganice la GUI desde el Diseñador Gráfico. En ese caso, el generador de código coloca sus declaraciones de tipo nuevamente en el método initialize().

código generado automáticamente se ve así:

// AUTO-GENERATED CODE 
    public class MyGUI { 
     private void initialize() { 
      // gui objects declared AND created in this scope by Window Builder 
      JFrame frame = new JFrame(); 
      JPanel panel_1 = new JPanel(); 
      frame.getContentPane().add(panel_1); 
    } 
    } 

lo que me gustaría es:

public class MyGUI { 
      // accessible from outside 
      public Frame frame = null; 
      public JPanel panel_1 = null; 

     private void initialize() { 
      // gui objects only created in this scope 
      frame = new JFrame(); 
      panel_1 = new JPanel(); 
      frame.getContentPane().add(panel_1); 
    } 
    } 

He estado buscando en la documentación de una solución (escasa documentación sobre eso), y también estudió las diversas preferencias de Window Builder pero hasta ahora no ha tenido suerte. Existe el 'enlace de datos', pero parece implementar MVC (unir los elementos de la GUI a un modelo) y bastante exagerado.

¿Existe un patrón de diseño que me falta, o se supone que debo 'pescar' las referencias fuera del alcance local de initialize() de alguna manera?

Respuesta

2

En la ventana de Preferencias, expanda WindowBuilder y Swing (o SWT) y luego expanda Generación de código. Hay opciones para declarar variables localmente, como campos de nivel de clase, y se inicializan de manera lenta. También puede elegir declaraciones planas o de bloque. Hay are some examples in the documentation under WindowBuilder Pro User Guide > Preferences > Swing de qué buscar.

+0

Gracias, eso es exactamente lo que estaba buscando. ¿Podría señalar el tema donde está documentado? He estado revisando el documento, pero no puedo encontrarlo. – count0

+0

@ count0 WindowBuilder Pro Guía del usuario> Preferencias> Swing: puede navegar por el lado izquierdo de la página. Voy a editar esto para mi pregunta: pretendía que el enlace fuera directamente a esta página. –

Cuestiones relacionadas