Traduction par Ap0 du document original sur http://www.java3d.org

Copyright © 2001 Greg Hopkins

Java 3D et l’interface utilisateur

Canvas3D

Voir le résultat

Chaque zone où un graphisme en 3D peut être affiché est appelé un Canvas3D. C’est un rectangle contenant la vue de vos objets au sein de votre monde. Vous placez le canevas dans une zone (une " frame "), puis vous créez un univers destiné à être affiché dans le canevas.

L’exemple suivant montre comment créer ce fameux canevas dans une frame avec des labels en haut et en bas. Le programme peut être exécuté comme une applet Java ou bien une application à part entière.

import com.sun.j3d.utils.universe.SimpleUniverse;

import com.sun.j3d.utils.geometry.ColorCube;

import javax.media.j3d.BranchGroup;

import javax.media.j3d.Canvas3D;

import java.awt.GraphicsConfiguration;

import java.awt.BorderLayout;

import java.awt.Label;

import java.applet.Applet;

import com.sun.j3d.utils.applet.MainFrame;

public class CanvasDemo extends Applet {

public CanvasDemo() {

setLayout(new BorderLayout());

GraphicsConfiguration config =

SimpleUniverse.getPreferredConfiguration();

Canvas3D canvas = new Canvas3D(config);

add("North",new Label("Voici un texte en haut"));

add("Center", canvas);

add("South",new Label("Voici un texte en bas"));

BranchGroup contents = new BranchGroup();

contents.addChild(new ColorCube(0.3));

SimpleUniverse universe = new SimpleUniverse(canvas);

universe.getViewingPlatform().setNominalViewingTransform();

universe.addBranchGraph(contents);

}

public static void main( String[] args ) {

CanvasDemo demo = new CanvasDemo();

new MainFrame(demo,400,400);

}

}

Java 3D et Swing

Le Canvas3D tire profit de votre carte graphique pour augmenter les performances. Malheureusement, il ne sent pas très à l’aise avec les composants de l’interface utilisateur Swing. Ces composants, appelés ‘lightweight, peuvent être cachés par le Canvas3D, même s’ils sont supposés se trouver au premier plan.

Il existe plusieurs solutions à ce problème :

  • Vous pouvez mélanger des composants lightweight et heavyweight sur le même zone seulement si vous les placer dans des contenants différents.
  • Si vous utilisez des menus " Popup ", une fonction static sur un JPopupMenu règle le problème :
    setDefaultLightWeightPopupEnabled(false);
  • Vous pouvez utiliser les composants moins récents AWT à la place de Swing (!).
    Précédent - Sommaire - Suivant

     
14 internaute(s) sur Web3d-fr
Copyright Web3d-fr 2001-2004