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
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|