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

Interfaces Graphiques en Java Discussion :

Problèmes Interface graphique


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 112
    Points : 45
    Points
    45
    Par défaut Problèmes Interface graphique
    Je suis actuellement en train de développer une application en Java.



    Comme vous pouvez le voir, elle est découpée en deux parties et ressemble un peu à l'explorateur Windows.

    1) Sur la partie gauche, je crée ce que j'appelle des modèles, après avoir saisi du texte dans une fenêtre en cliquant sur Ajouter un modèle, puis, en cliquant sur Ajouter une image à un modèle, je souhaite associer une image au modèle et l'afficher sur la partie droite.
    Actuellement, j'arrive à afficher une image mais dans une fenêtre à part.

    2) Ensuite, je souhaite enregistrer le modèle et son image dans un fichier sur le disque dur de manière ensuite à éventuellement ouvrir ce fichier et donc le modèle et l'image.

    Merci d'avance pour votre aide.
    Pour les intéressés, merci de m'envoyer un MP.

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Points : 379
    Points
    379
    Par défaut
    Pour ce qui est d'afficher l'image dans le cadre de droite ça ne devrait pas te poser de problème utilise la métode paintComponents(Graphics) du JPanel qui doit remplir ton cadre de droite. Pour la sauvegarde il faut que tu regardes du côté du packetage java.io qui fournit la classe ObjectOutputStream pour l'écriture d'un objet sur le disque et ObjectInputStream pour la lecture d'un fichier du disque contenant un objet java.

    Voilà cherche un peu et si tu ne trouves pas poste ta question.

  3. #3
    Membre régulier Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Points : 107
    Points
    107
    Par défaut
    Bonjour,
    Si j'ai bien vu tu utilises un JSplitPane. Pour afficher ton image dans le JSplitPane il te suffit de reprendre le morceau de code qui te sert à l'afficher dans ta fenêtre a part et coller ça dans un JPanel au lieu de la JFrame. Tu place le JPanel dans la partie droite de ton JSplitPane et cela devrait être bon (si ça ne fonctionne pas met le code en ligne).

    Pour l'enregistrement c'est possible, jette un oeil sur la Serialisation d'Objet. Il sera probablement plus simple d'enregistrer le "modele" d'un coté avec un lien vers l'image d'un autre coté, mais tout sauver en bloc n'est pas non plus impossible.
    Méfiance les composants Swing sont indiqués comme ne devant pas être sérialisés pour une compatibilité ultérieure (mais je ne sais pas trop à quoi il faut s'en tenir je ne sérialise pas de partie graphique).

    Bon code,
    kerinel

  4. #4
    Membre averti Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut
    Salut,
    Pour la sauvgarde de l'image et son modele tu as la classe RandomAccessFile; tu peux implementer plus qu'une solution.
    Par exemple tu peux ecrire le nom de chaque image et son modele sur une ligne et séparés par '|' ou ':' ou un caractere de tabulation puis tu lit les enregistrement ligne par ligne par la methode readLine() de la classe BufferedReader. Ensuite tu scindes la ligne en utilisant la classe StringTokenizer en passant la ligne lue et le caractere delimiteur en parametre.
    2eme solution consiste à ecrire en format fixe où chaque enregistrement est completé par un nombre n de '0' par exemple où n = taille maximale d'un enregistrement - la taille de l'enregistrement a insérer. Cela permet l'accès aléatoire aux enregistrements.
    par exemple pour atteindre l'enregistrement 5 on utilse la methode seek() ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    randAccFile.seek(taille maximale d un enregistrement * 4);
    A noter qu'un caractere occupe deux octets en java.
    "Un remboursement des programmes défectueux serait envisageable mais toute l'industrie du logiciel ferait faillite la première année." Andrew Tanenbaum.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    Voici ce que j'ai mis pour affichage de l'image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    JButton ajoutDoc = new JButton("Ajouter une image à un modèle");
    		    jpBoutons.add(ajoutDoc);
     
    		    ajoutDoc.addActionListener(new java.awt.event.ActionListener() {
     
    		    	public void actionPerformed(java.awt.event.ActionEvent evt) {
    		    	 	ImagePanel picture = new ImagePanel();
    		    	 	picture.setBounds(0,0,800,800);
    		      		image.add(picture);
    		      		image.setVisible(true);
    		      		image.revalidate();
    Voici ce que j'ai mis à la fin de ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // Panneau pour séparer la liste et l'affichage des images d'un modèle
    		JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
    						      listScrollPane, jspBibliotheque);	    
     
    	    jspBibliotheque.add(image);
     
    	    splitPane.add(jspBibliotheque, JSplitPane.RIGHT);
    	    splitPane.add(listScrollPane, JSplitPane.LEFT);
     
    	    jpaBibliothèque.add(splitPane, BorderLayout.CENTER);
    	    jspContenu.setViewportView(jpaBibliothèque);
     
    	    GUI.frame.setVisible(true);
    Pour l'enregistrement d'un modèle :

    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
     
    public class EnregistreModele implements Serializable {
    	public void write(Model model, String nomDeFichier) {
    		  File f = new File(nomDeFichier);
    		  boolean there = f.exists(); // vrai ou faux si le fichier existe ou non
     
    //vérification que le fichier où l'on va écrire l'objet existe, sinon on le crée
    		  if ( !there) {
    		    f.createNewFile();
    		  }
    		  else
    		  {
    			  System.out.println("Ce fichier existe!!");
    		  }
    		  try {
     
    		    //écriture de l'objet sur le disque
     
     
    			FileOutputStream w = new FileOutputStream("c:\\test.dat");
    			ObjectOutputStream o = new ObjectOutputStream(w);
    		    o.writeObject(model);
    		    o.close();
    		    w.close(); 
    		  }
    		 catch(IOException io) {
    			 System.out.println("Enregistrement non effectué"); 
    			 }
    		}
     
    	private void writeObject(java.io.ObjectOutputStream out) throws IOException 
    	{
    		out.defaultWriteObject();
    	}
     
    	private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException 
    	{
    		in.defaultReadObject();
    	}
    }
    Pour le chargement d'un modèle :
    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
     
    public class ChargerModele {
     
    	void load(Model model, String nomDeFichier) {
    		  File f = new File(nomDeFichier);
     
     
    		  try {
     
    		    //ouverture de l'objet sur le disque
     
     
    			  ObjectInputStream in = new ObjectInputStream(new FileInputStream(f));
    	            in.readObject();
    	            in.close();
     
    		  }
    		 catch(IOException io) {
    			 System.out.println("Chargement du modèle non effectué"); 
    			 }
    		}
     
    }

  6. #6
    Membre régulier Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Points : 107
    Points
    107
    Par défaut
    Salut,
    Dans la première partie, c'est quoi ton ImagePanel ? De même tu as une variable image, à quoi correspond-elle ?
    Sur la seconde partie, tu mets deux fois les composants dans ton JSplitPane, ce n'est pas vraiment utile . a priori c'est image qui doit prendre en charge ton image mais toujours pareil c'est quoi ?
    Enregistre modèle et charge modèle ne devraient pas être des classes mais seulement des méthodes non ? enfin c'est mon avis.
    Pour enregistrer un modèle, il suffit qu'il implémente Serializable.
    Normalement cette partie est suffisante:
    fais attention que dans ce cas, tu écrases le fichier si il existe.
    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
     
    public void sauvegarder(Model model, String nomDeFichier) {
        try{
              File f = new File(nomDeFichier);		     
    //vérification que le fichier où l'on va écrire l'objet existe, sinon on le crée
    	 if ( !f.exists())  f.createNewFile();
    	 FileOutputStream w = new FileOutputStream(f);//ce que tu avais écrit enregistrait sur le fichier test.dat, pas sur celui passé en paramètre
    	 ObjectOutputStream o = new ObjectOutputStream(w);
             //écriture de l'objet sur le disque
    	o.writeObject(model);
            o.flush();//vide le buffer avant de fermer
     	 o.close();             
    	}
        catch(Exception io) {
    //Attention il y a plein d'autres exceptions avec l'ObjectOutputStream
    //A voir si tu regroupes tous les catchs ou si tu separes
    			 System.out.println("Enregistrement non effectué"); 
     
                  }
    }
    meme si il y a des améliorations a apporté pour etre certain de fermer correctement les fichiers ouverts cf ici dans la FAQ

    Bon code,
    kerine

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    1) ImagePanel est une classe que j'ai créé.
    Voici son 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    public class ImagePanel extends JPanel{
    	private ImageIcon image;
    	private int hauteur;
    	private int largeur;
    	private Image myimg;
     
    	public void setImage(java.awt.Image img) {
    		this.myimg = img;
    		repaint();
    	}
     
    	public ImagePanel(){
     
     
    		FiltreImages filtre = new FiltreImages("Fichiers Images");
     
      		filtre.addExtension(".jpg");
      		filtre.addExtension(".bmp");
      		filtre.addExtension(".png");
     
     
      		JFileChooser chooser = new JFileChooser(".");
      		chooser.addChoosableFileFilter(filtre);
      		chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
     
      		//chooser.showOpenDialog(null);
     
     
      		//File nomFichier = chooser.getSelectedFile();
      		//String cheminImage = nomFichier.getAbsolutePath();
     
      		if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
            {
      			File nomFichier = chooser.getSelectedFile();
      	  		String cheminImage = nomFichier.getAbsolutePath();
      	  		this.image = new ImageIcon(cheminImage);
            }
      		else
      		{
      			if (chooser.showOpenDialog(null) == JFileChooser.CANCEL_OPTION)
      			{
      				return;
      			}
     
      		}
     
    		this.hauteur = this.image.getIconHeight();
     
    		this.largeur = this.image.getIconWidth();
    		this.setBounds(0,0,this.largeur,this.hauteur);
    	}  
     
     
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		Image img = this.image.getImage();
    		g.drawImage(img, 1000, 1000, null);
    	}
     
    }
    2) Ma variable image correspond au JPanel que je veux mettre sur la partie droite de l'application.

    3) EnregistreModel est une classe qui implémente Serializable et qui contient la méthode sauvegarder. Néanmoins, d'après vous, l'idéal serait que Model soit une interface ou une classe?

    4) Le bloc try/finally est à utiliser dans cette méthode?

    5) Que dois-je faire dans la deuxième partie pour éviter de mettre deux fois les composants?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    Dans le cadre de mon application en Java, connaissez-vous
    1) Une méthode permettant la sélection, à l'aide de la souris, d'une zone à l'intérieur d'une image sur laquelle se situe une information que l'on souhaite acquérir puis ensuite de donner un nom à cette zone

    2) Des méthodes permettant la création de documents XML

    Merci d'avance pour votre aide.

  9. #9
    Membre éclairé Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Points : 695
    Points
    695
    Par défaut
    Citation Envoyé par COLOMBAT Voir le message
    Dans le cadre de mon application en Java, connaissez-vous
    1) Une méthode permettant la sélection, à l'aide de la souris, d'une zone à l'intérieur d'une image sur laquelle se situe une information que l'on souhaite acquérir puis ensuite de donner un nom à cette zone

    2) Des méthodes permettant la création de documents XML

    Merci d'avance pour votre aide.
    bonjour,

    1) non

    2) regarde la FAQ XML
    Where is my mind

  10. #10
    Membre averti Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par COLOMBAT Voir le message
    Dans le cadre de mon application en Java, connaissez-vous
    1) Une méthode permettant la sélection, à l'aide de la souris, d'une zone à l'intérieur d'une image sur laquelle se situe une information que l'on souhaite acquérir puis ensuite de donner un nom à cette zone
    Salut,

    Extraire du texte depuis une image n'est pas assez simple, il te faut un effort dans le cadre de traitement d'image pour le faire.
    "Un remboursement des programmes défectueux serait envisageable mais toute l'industrie du logiciel ferait faillite la première année." Andrew Tanenbaum.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    J'ai entendu parler de l'utilisation de MouseInputListener et de MouseMotionListener.
    Faut-il les utiliser?

  12. #12
    Membre averti Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Points : 307
    Points
    307
    Par défaut
    Salut,
    Citation Envoyé par COLOMBAT Voir le message
    J'ai entendu parler de l'utilisation de MouseInputListener et de MouseMotionListener.
    Faut-il les utiliser?
    Pour extraire une partie d'une image, oui, avec un peu d'effort. Penses egalement à la classe BufferedImage.
    "Un remboursement des programmes défectueux serait envisageable mais toute l'industrie du logiciel ferait faillite la première année." Andrew Tanenbaum.

Discussions similaires

  1. Problème interface graphique - font
    Par Taka-kun dans le forum Ruby
    Réponses: 7
    Dernier message: 03/04/2008, 14h25
  2. Problème Interface graphique avec EJB
    Par manuvd dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 19/06/2007, 12h04
  3. Réponses: 3
    Dernier message: 15/06/2007, 18h14
  4. Problème interface graphique mandriva avec HP
    Par alicom86 dans le forum Mandriva / Mageia
    Réponses: 7
    Dernier message: 14/05/2007, 21h24
  5. Problème interface graphique
    Par thecyril dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 14/01/2007, 16h08

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