Accueil > Forum > > > > Problème d'affichage d'un canvas3D dans une JFrame
Problème d'affichage d'un canvas3D dans une JFrame
vendredi 10 mars 2006 à 16:08:08 |
Problème d'affichage d'un canvas3D dans une JFrame

frac10
|
Bonjour à tous d'abord,
débutant en Java, je suis en train d'essayer d'afficher un canvas3D dans un JDesktopPane de ma JFrame. Mon but serait d'arriver à changer la couleur du cube 3D (contenu dans le canvas3D) à partir de 3 JSlider (Rouge, Vert et Bleu).
Or, quand je lance l'application, je vois bien mes 3 sliders (plus le JEditorPane que j'ai ajouté uniquement pour voir si le changement de couleur fonctionnait...) mais pas ma scène en 3D (pas d'erreur à la compilation)... :-(
Bref, si quelqu'un avait une petite idée de mon erreur (qui doit être grossière je pense, vu mon inexpérience en Java), je l'en remercie énormément d'avance !!!
Ci-après le code :
// Etape 1 :
// Importation des packages Java 2
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Panel;
import javax.swing.JSlider;
import javax.swing.JSplitPane;
import javax.swing.JEditorPane;
import javax.swing.JInternalFrame;
import javax.swing.JCheckBox;
import javax.swing.JToolBar;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JLabel;
// Etape 2 :
// Importation des packages Java 3D
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.loaders.objectfile.*;
import com.sun.j3d.loaders.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.geometry.Box;
import javax.media.j3d.*;
import javax.media.j3d.Canvas3D;
import javax.vecmath.*;
public class Bof extends JFrame {
private JDesktopPane jDesktopPane = null;
private JSlider jSlider = null;
private JSlider jSlider1 = null;
private JSlider jSlider2 = null;
private JLabel jLabel = null;
private JLabel jLabel1 = null;
private JLabel jLabel2 = null;
private JEditorPane jEditorPane = null;
private Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
/**
* This is the default constructor
*/
public Bof() {
super("ONK ONK ONK !!!");
initialize();
setDefaultCloseOperation(EXIT_ON_CLOSE);
jSlider.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
sliderMouseDraggedCB();
}
});
jSlider1.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
sliderMouseDraggedCB();
}
});
jSlider2.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
sliderMouseDraggedCB();
}
});
// Etape 4 :
// Creation d'un objet SimpleUniverse
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
// Etape 5 :
// Positionnement du point d'observation pour avoir une vue correcte de la
// scene 3D
simpleU.getViewingPlatform().setNominalViewingTransform();
// Etape 6 :
// Creation de la scene 3D qui contient tous les objets 3D que l'on veut visualiser
BranchGroup scene = createSceneGraph();
// Etape 7 :
// Compilation de la scene 3D
scene.compile();
// Etape 8:
// Attachement de la scene 3D a l'objet SimpleUniverse
simpleU.addBranchGraph(scene);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
/**
* Creation de la scene 3D qui contient tous les objets 3D
* @return scene 3D
*/
public BranchGroup createSceneGraph() {
// Creation de l'objet parent qui contiendra tous les autres objets 3D
BranchGroup parent = new BranchGroup();
// Creation d'une lumiere ambiante de couleur blanche
BoundingSphere bounds = new BoundingSphere(new Point3d(), 100);
Light ambientLight = new AmbientLight(new Color3f(Color.white));
ambientLight.setInfluencingBounds(bounds);
parent.addChild(ambientLight);
// Creation d'une lumiere directionnelle de couleur blanche
Light directionalLight = new DirectionalLight(
new Color3f(Color.white),
new Vector3f(1, -1, -1));
directionalLight.setInfluencingBounds(bounds);
parent.addChild(directionalLight);
// Creation du groupe de transformation sur lequel vont s'appliquer les
// comportements
TransformGroup mouseTransform = new TransformGroup();
// Le groupe de transformation sera modifie par le comportement de la
// souris
mouseTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
mouseTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
// Creation comportement rotation a la souris
MouseRotate rotate = new MouseRotate(mouseTransform);
rotate.setSchedulingBounds(new BoundingSphere());
parent.addChild(rotate);
// Creation comportement deplacement a la souris
MouseTranslate translate = new MouseTranslate(mouseTransform);
translate.setSchedulingBounds(new BoundingSphere());
parent.addChild(translate);
// Creation comportement zoom a la souris
MouseZoom zoom = new MouseZoom(mouseTransform);
zoom.setSchedulingBounds(new BoundingSphere());
parent.addChild(zoom);
Background background = new Background(new Color3f(Color.white));
background.setApplicationBounds(new BoundingBox());
parent.addChild(background);
// Chargement de l'objet Wavefront et ajout au graphe de la scene
mouseTransform.addChild(new Box(0.5f, 0.5f, 0.2f, null));
parent.addChild(mouseTransform);
return parent;
}
private void sliderMouseDraggedCB() {
float Rcolor, Vcolor, Bcolor;
Rcolor = jSlider.getValue() / 100f;
Vcolor = jSlider1.getValue() / 100f;
Bcolor = jSlider2.getValue() / 100f;
jEditorPane.setBackground(new java.awt.Color(Rcolor,Vcolor,Bcolor));
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(600, 400);
this.setContentPane(getJDesktopPane());
this.setTitle("JFrame");
}
/**
* This method initializes jDesktopPane
*
* @return javax.swing.JDesktopPane
*/
private JDesktopPane getJDesktopPane() {
if (jDesktopPane == null) {
jLabel2 = new JLabel();
jLabel2.setBounds(new java.awt.Rectangle(152,333,36,16));
jLabel2.setText("Bleu");
jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1 = new JLabel();
jLabel1.setText("Vert");
jLabel1.setSize(new java.awt.Dimension(36,16));
jLabel1.setLocation(new java.awt.Point(152,307));
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel = new JLabel();
jLabel.setBounds(new java.awt.Rectangle(151,279,38,16));
jLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel.setText("Rouge");
jDesktopPane = new JDesktopPane();
jDesktopPane.add(getJSlider(), null);
jDesktopPane.add(getJSlider1(), null);
jDesktopPane.add(getJSlider2(), null);
jDesktopPane.add(jLabel, null);
jDesktopPane.add(jLabel1, null);
jDesktopPane.add(jLabel2, null);
jDesktopPane.add(getJEditorPane(), null);
jDesktopPane.add(getCanvas3D(), null);
}
return jDesktopPane;
}
/**
* This method initializes jSlider
*
* @return javax.swing.JSlider
*/
private JSlider getJSlider() {
if (jSlider == null) {
jSlider = new JSlider();
jSlider.setBounds(new java.awt.Rectangle(189,279,200,16));
}
return jSlider;
}
/**
* This method initializes jSlider1
*
* @return javax.swing.JSlider
*/
private JSlider getJSlider1() {
if (jSlider1 == null) {
jSlider1 = new JSlider();
jSlider1.setBounds(new java.awt.Rectangle(189,306,200,16));
}
return jSlider1;
}
/**
* This method initializes jSlider2
*
* @return javax.swing.JSlider
*/
private JSlider getJSlider2() {
if (jSlider2 == null) {
jSlider2 = new JSlider();
jSlider2.setSize(new java.awt.Dimension(200,16));
jSlider2.setLocation(new java.awt.Point(189,333));
}
return jSlider2;
}
/**
* This method initializes jEditorPane
*
* @return javax.swing.JEditorPane
*/
private JEditorPane getJEditorPane() {
if (jEditorPane == null) {
jEditorPane = new JEditorPane();
jEditorPane.setBackground(new java.awt.Color(127,127,127));
jEditorPane.setBounds(new java.awt.Rectangle(30,281,106,69));
}
return jEditorPane;
}
private Canvas3D getCanvas3D() {
if (canvas3D == null) {
canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
canvas3D.setSize(new java.awt.Dimension(000,100));
canvas3D.setLocation(new java.awt.Point(10,10));
}
return canvas3D;
}
public static void main(String [] args) {
Bof tv = new Bof();
tv.show();
}
}
|
|
jeudi 16 mars 2006 à 11:45:01 |
Re : Problème d'affichage d'un canvas3D dans une JFrame

dmaillet
|
Avec du retard, mais mieux vaut tard que jamais! un canvas3d n'a pas de dimension par defaut, donc il suffit de lui donnner une dimension et c'est parti... canvas3d.setSize(200,200); par exemple, ou d'utiliser un layout s'en chargeant...
dams
|
|
jeudi 16 mars 2006 à 15:31:53 |
Re : Problème d'affichage d'un canvas3D dans une JFrame

frac10
|
Merci beaucoup de m'avoir répondu, mais en fait je l'ai dimensionné le canvas3d (tout en bas) : "canvas3d.setSize(new java.awt.Dimension(100,100)" (ne pas faire gaffe au (000,100) du post, je l'ai modifié et cela ne change rien)...
Je ne sais vraiment pas comment faire, parce que rien ne s'affiche : j'ai essayé avec un layout, çà marche, mais je voudrai le faire avec JDesktopPane pour pouvoir "mettre en page" comme je veux. Si il y avait une autre idée...
Mais merci quand même !
|
|
jeudi 16 mars 2006 à 15:39:07 |
Re : Problème d'affichage d'un canvas3D dans une JFrame

dmaillet
|
Non, ton erreur est simple, tu n'appelles pas la methode getCanvas3D() pour creer ton canvas si tu regardes bien, dans tes declarations en haut tu fais private Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); alors forcement, tu ne passes pas par le setSize... change ca, et ca marche (j'avais essaye avant de te repondre evidemment...)
dams
|
|
jeudi 16 mars 2006 à 18:06:33 |
Re : Problème d'affichage d'un canvas3D dans une JFrame

frac10
|
Merci beaucoup pour ta réponsse si rapide ! Excuse-moi pour mon dernier message, mais je pensais juste que tu n'avais pas vu que j'avais appelé le setSize, désolé...  Et désolé également d'être une véritable buse, mais il faut que j'appelle la méthode getCanvas3D() à quel endroit ?  Merci d'avance !!!
|
|
vendredi 17 mars 2006 à 08:37:36 |
Re : Problème d'affichage d'un canvas3D dans une JFrame

dmaillet
|
Réponse acceptée !
Tu vires private Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); et tu mets private Canvas3D canvas3D; dans tes declarations et dans ton constructeur Bof ou dans le initialize() tu appelles getCanvas();
dams
|
|
vendredi 17 mars 2006 à 09:38:15 |
Re : Problème d'affichage d'un canvas3D dans une JFrame

frac10
|
C'est bon, çà marche nickel comme çà !!! Merci beaucoup pour ta patience et pour m'avoir aidé !!!
|
|
Cette discussion est classée dans : java, import, javax, jslider, jdesktoppane
Répondre à ce message
Sujets en rapport avec ce message
filtre dans les JFileChoosen [ par jc_romeo ]
Bonjourje voudrais faire un filtre dans les JFileChoosen et on m'a dit que je pouvais utiliser ExampleFileFilter()néanmoins quand je le mets il me dit
Stéganographie sur un fichier wav [ par aurelie_devplus ]
Je dois réaliser une application qui encrypte un fichier .txt dans un fichier .wav. Je dois pouvoir placer le texte dans le fichier wav sans modifier
Problème rafraichissement image avec Swing [ par ejouvin ]
Bonjour.Je suis en train de faire une petite application qui contient une arborescence à gauche et une fenêtre de détail sur la droite.Dans le code su
Probème dans mon code pour port parallèle [ par mageti ]
Bonjour à tous,Je poursuis péniblement ma quête à propos de "comment puis-je commander mon port parallèle ?"J'ai bidouillé un petit code à partir des
JavaMail et J2EE [ par nexol ]
Salut,Je dispose du J2EE 1.4 qui comprend par défaut le package JavaMail. J'ai créé un fichier pour tester mais le compilateur ne reconnait pas tous l
pb Java2D avec Java3D [ par WhiteBeast ]
Bonjour à tous!J'ai réussi a résoudre une partie de mon problème lié à la manipulation de DXF avec java grâce à un Loader trouver sur le net mais main
Pb avec horloge en java [ par GUIF44 ]
Bonjour, je travail actuellement sur un programme nécessitant une horloge (affichage heure type: 11:48:34). J'arrive bien à récuperer les heures, minu
Jtable et erreur ! [ par jimmy69 ]
Bonjour a tous,J'ai un p'tit souci avec mon application qui ne fait que d'ajouter des composant sur un JFrame !lorsque j'ajoute un jtable et que je l
Pb de centrage d'un JLabel vertical dans une JTable [ par MehdiD94 ]
Bonjour !!Apres de nombreuses heures vaines, j'appelle a l'aide.J'ai une JTable dont la premiere ligne apres le header contient des JVerticalLabel (cl
Probleme avec JButton et ImageIcon [ par ralebole ]
J'ai un probleme avec JButton et ImageIcon quand je compile et que j'execute avec "Jcreator Le" tous fonctionne normalement j'ai ma fenetre avec mon b
Livres en rapport
|
Derniers Blogs
DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio
Forum
J2EE OU ASP J2EE OU ASP par ikanD
Cliquez pour lire la suite par ikanD
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|