2011-06-25 4 views
4

Ok, j'essaie d'ajouter le globe World Wind de la NASA à une fenêtre GUI créée par le constructeur de l'interface graphique NetBeans. Mon code exemple instancie sa propre fenêtre, et le constructeur GUI aimerait que je ne modifie pas les zones nécessaires pour glisser ceci :) J'écrirais le mien, mais cela fait partie d'une application plate-forme NetBeans et contient du code et des annotations gérer encore. Je ne suis pas sûr de savoir comment accomplir cela. Voici le code d'exemple que je voudrais dans la fenêtre:Ajout d'un composant personnalisé au générateur d'interface graphique NetBeans! (WorldWind)

public class WorldWindTest { 

public static void main(String[] args) { 

    //create a WorldWind main object 
    WorldWindowGLCanvas worldWindCanvas = new WorldWindowGLCanvas(); 
    worldWindCanvas.setModel(new BasicModel()); 
      Position myPoint = Position.fromDegrees(31.12, -88.64, 35000); 


    //build Java swing interface 
    JFrame frame = new JFrame("World Wind"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(worldWindCanvas); 
    frame.setSize(800,600); 
    frame.setVisible(true); 

    //create some "Position" to build a polyline 
    LinkedList<Position> list = new LinkedList<Position>(); 

//   list.add(Position.fromDegrees(i,0.0,i*20000)); 
    } 

      list.add(Position.fromDegrees(30.12, -85.64, 35000)); 
      list.add(Position.fromDegrees(31.12, -88.64, 35000)); 


    //create "Polyline" with list of "Position" and set color/thickness 
    Polyline polyline = new Polyline(list); 
    polyline.setColor(Color.RED); 
    polyline.setLineWidth(3.0); 

    //create a layer and add Polyline 
    RenderableLayer layer = new RenderableLayer(); 
    layer.addRenderable(polyline); 
    //add layer to WorldWind 
    worldWindCanvas.getModel().getLayers().add(layer); 
} 
} 
+1

C'est pourquoi je n'utilise pas de builds GUI ... leur "commodité" s'avère souvent être un inconvénient. :) – mre

+1

Oui, je vous entends, mais ils vous un peu chemin de fer dans la plate-forme NetBeans. –

+1

Vous pouvez toujours ajouter un conteneur qui utilise BorderLayout en utilisant la génération de code NetBeans, puis en utilisant du code personnalisé, ajoutez WorldWindowGLCanvas au conteneur dans la position BorderLayout.CENTER. –

Répondre

4

Amplifier sur mon commentaire, je pensais que vous pourriez créer une classe, disons appelé SetUpWorldWindowGLCanvas, et en elle, initialiser et configurer votre objet WorldWindowGLCanvas et puis donnez-lui une méthode getter publique qui vous permettra d'obtenir l'objet WorldWindowGLCanvas mis en place. à savoir,

public class SetUpWorldWindowGLCanvas { 

    WorldWindowGLCanvas worldWindCanvas = new WorldWindowGLCanvas(); 

    public SetUpWorldWindowGLCanvas() { 
     worldWindCanvas.setModel(new BasicModel()); 
     Position myPoint = Position.fromDegrees(31.12, -88.64, 35000); 

     // ... etc 
    } 

    public WorldWindowGLCanvas getWwGlCanvas() { 
     return worldWindCanvas; 
    } 
} 

Et puis placez ce BorderLayout.CENTER dans un JPanel qui a été créé dans votre GUI builder et qui utilise BorderLayout comme gestionnaire de mise en page.

+0

+1 pour l'encapsulation. Il peut également être possible de connecter ceci en tant qu'une ou plusieurs propriétés de génération de code, mais il serait difficile à décrire. – trashgod

+0

Ça va marcher. Avoir un problème avec le dang .dlls maintenant, mais cette approche est solide. Merci! –

3

Au lieu d'utiliser l'éditeur de l'interface graphique pour votre application entière, limiter son utilisation juste les quelques conteneurs qui bénéficieront le plus de celui-ci, par exemple mises en page difficiles. Ensuite, votre WorldWindowGLCanvas peut être ajouté normalement à votre top-level container. Dans ce example, WorldWindowGLCanvas apparaîtrait aux côtés NewJPanel:

JFrame f = new JFrame(); 
f.setLayout)new GridLayout(1, 0); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f.add(worldWindCanvas); 
f.add(new NewJPanel()); 
f.pack(); 
f.setVisible(true); 
+0

Je pense que votre réponse est liée à la mienne. Eh bien, 1+ vote depuis GMTA, et puisque le PO ne revient évidemment pas. –

+0

LOL, je suis de retour, je suis de retour. Je viens juste de me lever, il faut que je prenne un peu de temps pour profiter de ton anniversaire, je ne peux pas coder tout le temps :) J'essaierai de les essayer, de revenir avec toi dans quelques-uns. –

Questions connexes