IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

[JFrame] affichage de component et d'image dans une JFrame


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Points : 53
    Points
    53
    Par défaut [JFrame] affichage de component et d'image dans une JFrame
    Bonjour,
    je n'arrive pas à afficher dans une même JFrame des component et une image, enfin si, mais il s'affiche un peu n'importe comment...
    Comment faire pour les placer correctement?
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    JFrame frame = new JFrame("XGLImageViewer");
    GridBagLayout gridbag = new GridBagLayout();
    GridBagConstraints constraints = new GridBagConstraints();
    viewer.setLayout(gridbag);
     
    viewer.buildConstraints(constraints,0,0,1,1,10,40);
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.NORTHWEST;
    TextField champ = new TextField("",20);
    gridbag.setConstraints(champ,constraints);
    viewer.add(champ);	
     
    BufferedImage image = ImageIO.read(new File(viewer.getNomFic()));
     
    //Construit un adapteur sur l'image image. Si l'image en entrée n'est pas une image en niveau de gris, une exception est levée.       
    GrayLevelImageAdapter gray_image = new GrayLevelImageAdapter( image ); 
     
    viewer.setImage( gray_image );
    merci d'avance

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    c'est voulu le GridBagLayout ?

    personnellement je le trouve un peu compliqué à utiliser...

    essaie avec les BorderLayout, FlowLayout, GridLayout, ... qui sont vraiment plus facile à utiliser et qui permettent déjà d'obtenir des dispositions de composants assez élaborées

    tu peux aussi placer le layout à null, et placer tous tes composants à la main en utilisant setBounds();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    getContentPane().setLayout(null);
     
    JButton bout = new JButton("Bouton");
    bout.setBounds(0,0,100,25);
     
    getContentPane().add(bout);
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    le pb c que je voudrais qu'il y ait deux partie dans ma fenetre :
    le premiere contrenant un champ texte et un bouton,
    la seconde contenant l'image
    Est ce que je peux faire ça en utilisant les autres layout? et comment?

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par Joeleclems
    Est ce que je peux faire ça en utilisant les autres layout? et comment?
    oui bien sur, tu peux utiliser un GridLayout de 2 cases de large et 1 en hauteur.

    ensuite, dans la première case tu met un JPanel qui contient ton image et dans la 2ème un JPanel qui contient ton bouton et ton label (etc tu peux "empiler" les Layouts et les JPanel)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    getContentPane().setLayout(new GridLayout(1,2));
    JPanel pan1 = new JPanel(); // ton panel image
    JPanel pan2 = new JPanel(); // ton panel bouton/label
    ...
     
    getContentPane().add(pan1);
    getContentPane().add(pan2);
    sinon, jette un coup d'oeuil aux JSplitPane, qui peuvent être utiles pour séparer des zones en 2 parties redimensionnables

    http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JSplitPane.html
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 156
    Points
    156
    Par défaut
    Il n' y a pas de difficultés à utiliser le GridBagLayout. Il faut juste se rappeler qu'il doit y avoir AU MOINS une contrainte telle que :

    gridConstraints.weightx != 0.0 et gridConstraints.weighty != 0.0

    A+

    [/code]

  6. #6
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    J'ai encore un petit souci, les deux "component" et l'image s'affichent bien dans la même fenetre mais, j'aimerais redimensionner la partie qui contient les "component" pour la retrecir, et je n'y arrive pas!
    voici le main de la classe "XGLImageViewer":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    static public void main(String argv[]){
     
    	try {
    		String nom_fichier = new String ("");
     
    		XGLImageViewer viewer = new XGLImageViewer();
    		JFrame frame = new JFrame("XGLImageViewer");
     
    		frame.getContentPane().setLayout(new GridLayout(2,0,1,1)); 
    		JPanel panComp = new JPanel(); // le panel pour la demande d'img 
    		TextField champ = new TextField("",20);
    		Button bouton = new Button("Valider");	
    		panComp.add(champ);
    		panComp.add(bouton);
     
    		BufferedImage image = ImageIO.read(new File(viewer.getNomFic()));
     
    		if(image == null) {
    		System.out.println("Impossible de lire l'image dans le fichier \"" + viewer.getNomFic() + "\"");
    		return;
    		}
     
    		GrayLevelImageAdapter gray_image = new GrayLevelImageAdapter( image );
    		viewer.setImage( gray_image );
     
    		frame.getContentPane().add(panComp); 				
    	   	frame.getContentPane().add(viewer);
    	    frame.pack();
     
    	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    frame.setVisible(true);
    	}
    	catch(IOException e) {
    	    System.err.println(e);
    	}
    	catch(NotGrayLevelException e ) {
    	    System.err.println( "Ce n'est pas une image en niveaux de gris.");
    	}
     
     
        }

    merci d'avance

  7. #7
    Membre éprouvé
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Points : 1 246
    Points
    1 246
    Par défaut
    Une solution très simple à ton problème serait de placer sur ta fenêtre avec un BorderLayout
    une JToolBar dans laquelle tu places ton JButton et ton JTextField
    un panneau pour recevoir ton image

    Car d'après ta description cela ressemble fortement à un truc qui permet de visualiser les images...

  8. #8
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    j'ai toujours le même pb en utilisant le JToolBar...
    j'ai essayé de reduire la taille du JTollBar en utilisant "setBounds" mais ça ne change rien... j'ai mis en gras le code que j'ai modifié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    static public void main(String argv[]){
     
    	try {
    		String nom_fichier = new String ("");
     
    		XGLImageViewer viewer = new XGLImageViewer();
    		JFrame frame = new JFrame("XGLImageViewer");
     
    		frame.getContentPane().setLayout(new GridLayout(2,0,1,1)); 
    		[b]JToolBar barComp = new JToolBar();	//la barre d'outil contenant le bouton et le champ[/b]		TextField champ = new TextField("",20);
    		Button bouton = new Button("Valider");	
    		[b]barComp.setBounds(0,0,50,50);
    		barComp.add(champ);
    		barComp.add(bouton);[/b]		
     
    		BufferedImage image = ImageIO.read(new File(viewer.getNomFic()));
     
    		if(image == null) {
    		System.out.println("Impossible de lire l'image dans le fichier \"" + viewer.getNomFic() + "\"");
    		return;
    		}
     
    		GrayLevelImageAdapter gray_image = new GrayLevelImageAdapter( image );
    		viewer.setImage( gray_image );
     
    		[b]frame.getContentPane().add(barComp);[/b]	 				
    	   	frame.getContentPane().add(viewer);
    	    frame.pack();
     
    	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    frame.setVisible(true);
    	}
    	catch(IOException e) {
    	    System.err.println(e);
    	}
    	catch(NotGrayLevelException e ) {
    	    System.err.println( "Ce n'est pas une image en niveaux de gris.");
    	}
     
     
        }

  9. #9
    Membre éprouvé
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Points : 1 246
    Points
    1 246
    Par défaut
    Normal tu utilises un grid layout tu dois utiliser un BorderLayout si tu ne veux pas avoir d'ennui

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enregistrement des images dans une JFrame
    Par touma10 dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 01/06/2010, 23h04
  2. Réponses: 28
    Dernier message: 18/05/2010, 15h14
  3. affichage Images dans une JFrame
    Par rburney dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 19/12/2007, 17h39
  4. Afficher une image dans une JFrame
    Par vince351 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 25/01/2007, 18h32
  5. [JLabel] Chargement d'image dans une JFrame
    Par mr.t dans le forum Composants
    Réponses: 10
    Dernier message: 27/01/2005, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo