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 :

JTextPane, Ecrire du texte, Insérer images, et le tout dans une JScroll


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut JTextPane, Ecrire du texte, Insérer images, et le tout dans une JScroll
    Bonjour, alors voilà,


    j'ai du texte à mettre en forme avec des images à insérer entre certains paragraphes.


    J'ai commencé par utiliser un JTextPane, mais il s'avérait impossible d'insérer une image entre 2 paragraphes, mais seulement à la fin du texte (à la fin du JTextPane).

    J'ai donc décidé d'utiliser plusieurs JTextPane, et de créer séparemment des panels d'images à insérer entre chaque JTextPane.

    J'ai alors créer un JTextPane principal. J'ai fait un BoxLayout sur celui-ci, et je lui ai ajouté tous les JTextPane secondaires ainsi que les panels d'images.

    Ensuite j'ai voulu tout mettre dans une scroll verticale.

    J'obtient alors des erreurs:
    - d'une part les images sont écrasées
    - d'autre part seule une partie de l'ensemble du texte (ensemble des JTextPanes) s'affiche à l'écran, et la scroll est inactive (je ne peux pas descendre plus bas que l'écran).
    regardez ma photo pièce jointe c'est affreux !

    Voici l'ensemble du code de ma Jframe (tout ne concerne pas ce problème):

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
     
    import java.awt.*;
     
     
    public class ViewDossierTor extends JFrame
    {
     
     
     
     
     
    	public ViewDossierTor(Controller controller)
    	{
     
    		this.setTitle("Compte rendu du dossier");
    	  this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);      
    	  	this.setSize(w, h);
     
    		JScrollPane scroll = new JScrollPane(getPanel());
     
    		this.getContentPane().add(scroll);
     
    	}
     
     
     
    	public JTextPane getPanel()
    	{
     
    		JTextPane jTextPane = new JTextPane();
     
    		jTextPane.setLayout(new BoxLayout(jTextPane , BoxLayout.Y_AXIS));
     
    		jTextPane.add(getPanel1());
    		jTextPane.add(frame1.getContentPane());
    		jTextPane.add(getPanel2());
    		jTextPane.add(getPanel3());
    		jTextPane.add(getPanel4());
    		jTextPane.add(getPanel5());
     
    		return jTextPane;
    	}
     
     
     
    	public JTextPane getPanel1 ()
    	{
     
    		JTextPane jTextPane1 = new JTextPane();
        	jTextPane1.setEditable(true);
     
        	//image1 = new Image1();
     
     
        	// définition des styles
        	Style defaut = jTextPane1.getStyle("default");
        	      StyleConstants.setFontSize(defaut, 13);
          		  StyleConstants.setFontFamily(defaut, "TimesRoman");
        	Style style1 = jTextPane1.addStyle("style1", defaut);
        	      StyleConstants.setFontFamily(style1, "TimesRoman");
        	      StyleConstants.setFontSize(style1, 16);
        	      StyleConstants.setBold(style1, true);
            Style style2 = jTextPane1.addStyle("style2", jTextPane1.getLogicalStyle());
    	          StyleConstants.setBold(style2, true);
    	          StyleConstants.setFontSize(style2, 14);
    	    Style style3 = jTextPane1.addStyle("style3", jTextPane1.getLogicalStyle());
                  StyleConstants.setBold(style3, true);
                  StyleConstants.setFontSize(style3, 13);        
     
     
        	      //StyleConstants.setForeground(style1, Color.BLACK);
     
     
        	String s1 = "I- PREAMBULE\n\n";
        	String s2 = "    La société ACSON a été mandatée par Monsieur "+ s_nom + " afin de réaliser l'étude acoustique de sa maison située "+ s_rue +" à "+ s_ville+ " ("+ s_codePostal+ ") .\nCette étude se fait sur plans et à partir du cahier des charges du constructeur. Elle permet de définir les isolements acoustiques des bâtiments d'habitation par rapport à l'arrêté du 30 mai 1996 en vigueur.\nNous proposerons éventuellement les matériaux à mettre en oeuvre en façade afin que les isolements soient respectés d'un point de vue règlementaire.\n\n\n";
     
     
        	StyledDocument sDoc = (StyledDocument)jTextPane1.getDocument();
     
        	//jTextPane1.insertIcon( new ImageIcon("images/norme2.jpg"));
        	//jTextPane1.insertIcon( new ImageIcon("images/norme4.jpg"));
     
     
     
        	try 
        	{
        	      int pos = 0;
        	      sDoc.insertString(pos, s1, style1);pos+=s1.length();
        	      sDoc.insertString(pos, s2, defaut);pos+=s2.length();
        	    	}	       
     
     
         	catch (BadLocationException e) 
        	{ 
         	}
     
    	    return jTextPane1;
        }
     
     
     
    	public class Image1 extends JPanel
    	{ 
    	    String image1; // image de fond
     
    	    public Image1() 
    	    { 
    	         this.image1 = "images/tableau_3.jpg"; // image de fond
    	    }
     
    	    public void paintComponent(Graphics g)
    	    {
    	         g.drawImage(new ImageIcon(Toolkit.getDefaultToolkit().getImage(image1)).getImage(), 0, 0, this.getWidth(), this.getHeight(), null);
    	    }
    	}
     
     
     
     
    	public class Frame1 extends JFrame 
    	{
     
    	   private JPanel ouest = new JPanel();
    	   private JPanel est = new JPanel();
     
    	   public Frame1() 
    	   {
    		  Image1 image1 = new Image1();
    	  	  //ouest.setBackground(Color.BLUE);
    	      //add(ouest, BorderLayout.WEST);
    	      //add(sud, BorderLayout.SOUTH);
    	      add(image1, BorderLayout.CENTER);
     
    	      //add(est, BorderLayout.EAST);
    	      setVisible(true);
    	   }
    	}  
     
     
     
     
     
    	public JTextPane getPanel2 ()
    	{
     
    		JTextPane jTextPane2 = new JTextPane();
        	jTextPane2.setEditable(true);
     
     
        	// définition des styles
        	Style defaut = jTextPane2.getStyle("default");
        	      StyleConstants.setFontSize(defaut, 13);
          		  StyleConstants.setFontFamily(defaut, "TimesRoman");
        	Style style1 = jTextPane2.addStyle("style1", defaut);
        	      StyleConstants.setFontFamily(style1, "TimesRoman");
        	      StyleConstants.setFontSize(style1, 16);
        	      StyleConstants.setBold(style1, true);
            Style style2 = jTextPane2.addStyle("style2", jTextPane2.getLogicalStyle());
    	          StyleConstants.setBold(style2, true);
    	          StyleConstants.setFontSize(style2, 14);
    	    Style style3 = jTextPane2.addStyle("style3", jTextPane2.getLogicalStyle());
                  StyleConstants.setBold(style3, true);
                  StyleConstants.setFontSize(style3, 13);        
     
     
          	String s19 = "    2.2- Isolement contre les bruits des transports terrestres\n\n";
        	String s20 = "La détermination de l'isolement acoustique minimal des bâtiments d'habitation contre les bruits des transports terrestres est définie par l'arrêté du 30 mai 1996.\n\n";
        	String s21 = "        2.2.1- Classement des infrastructures de transports terrestres\n\n";
        	String s22 = "Le classement des infrastructures de transports terrestres et la largeur maximale des secteurs affectés par le bruit de part et d'autre de l'infrastructure, sont définis en fonction des niveaux sonores de référence, dans le tableau suivant:\n\n";
     
        	StyledDocument sDoc = (StyledDocument)jTextPane2.getDocument();
     
        	try 
        	{
        	      int pos = 0;
     
        	      sDoc.insertString(pos, s19, style2);pos+=s19.length();
        	      sDoc.insertString(pos, s20, defaut);pos+=s20.length();
        	      sDoc.insertString(pos, s21, style2);pos+=s21.length();
        	      sDoc.insertString(pos, s22, defaut);pos+=s22.length();
        	}	       
     
     
     	    catch (BadLocationException e) 
    	    { 
     	    }
     
    	    return jTextPane2;
    	}
     
     
     
    }
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il faut que ta classe Image1 redéfinisse la méthode getPreferredSize pour qu'elle renvoie la taille de l'image dessinée dessus.

  3. #3
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut
    Merci pour l'aide aussi rapide !

    Comme ça?

    J'ai essayé ça ne marche pas, l'image est toujours écrabouillée ..


    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
     
     
    public class Image1 extends JPanel
    	{ 
    	    String image1; // image de fond
     
    	    public Image1() 
    	    { 
    	         this.image1 = "images/tableau_3.jpg"; // image de fond
    	         this.setPreferredSize(getPreferredSize());
    	    }
     
    	    public Dimension getPreferredSize() 
    	    { 
    	    	return new Dimension(800, 250); 
    	    } 
     
     
    	    public void paintComponent(Graphics g)
    	    {
    	         g.drawImage(new ImageIcon(Toolkit.getDefaultToolkit().getImage(image1)).getImage(), 0, 0, this.getWidth(), this.getHeight(), null);
     
    	    }
    	}

  4. #4
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut
    En fait mon code est correct pour l'image, mais le problème vient d'ailleurs, il vient du JTextPane, ça n'a pas l'air d'être top comme support.

    Au départ je n'en avais qu'un seul de JTextPane qui contenait tout le texte, et la scroll l'a accepté. Mais avec un JTextPane principal et plusieur secondaires contenus dans ce dernier, ça plante.

    Si maintenant à la place du JTextPane principal j'utilise un COntainer, l'image est bien affichée ainsi que l'ensemble des JTextPanes secondaires (tout le texte est affiché, l'image aussi s'intègre bien au centre) MAIS seulement au lieu de n'avoir qu'un seul SCROLL vertical, j'en ai 2, un vertical et un horizontal.

    Je ne veux qu'un seul scroll vertical.

    De plus je n'ai plus le retour à la ligne automatique inhérent au JTextPane

    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
    public ViewDossierTor(Controller controller)
    	{
     
    		this.setTitle("Compte rendu du dossier");
    	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      
    	  	this.setSize(w, h);
     
    		JScrollPane scroll = new JScrollPane(getPanel());
     
    		this.getContentPane().add(scroll);
     
    		s_pièce[0] = "l'entrée";
    		s_correction[0][0]="facelat_facelat";
     
    	}
     
    	/* 
    	public JTextPane getPanel()
    	{
     
    		JTextPane jTextPane = new JTextPane();
     
    		jTextPane.setLayout(new BoxLayout(jTextPane , BoxLayout.Y_AXIS));
     
    		jTextPane.add(getPanel1());
    		jTextPane.add(frame1.getContentPane());
    		jTextPane.add(getPanel2());
    		jTextPane.add(getPanel3());
    		jTextPane.add(getPanel4());
    		jTextPane.add(getPanel5());
     
    		return jTextPane;
    	}
    	*/
    	public Container getPanel()
    	{
     
    		Container jTextPane = new Container();
     
    		jTextPane.setLayout(new BoxLayout(jTextPane , BoxLayout.Y_AXIS));
     
    		jTextPane.add(getPanel1());
    		jTextPane.add(frame1.getContentPane());
    		jTextPane.add(getPanel2());
    		jTextPane.add(getPanel3());
    		jTextPane.add(getPanel4());
    		jTextPane.add(getPanel5());
     
    		return jTextPane;
    	}
    Images attachées Images attachées  

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    La façon dont tu as coté ton ImagePanel n'est de loin pas la meilleure.

    En effet le chargement de l'image ne doit surtout pas être fait dans le paintComponent, mais dans le constructeur.
    De plus la méthode getImage de Toolkit a deux inconvénients majeurs:

    1. Elle est asynchrone et ne permet pas de savoir si l'image est chargée ou non à la fin de l'appel
    2. Elle ne ressort pas d'exception si l'image n'a pu être chargée.

    Donc on préfèrera quelque chose dans ce style

    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
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.io.*;
     
     
    public class ImagePanel extends JPanel implements Serializable {
        private Image image = null;
        private boolean streched = false;
     
        public ImagePanel(Image image) {
            this.image = image;
        }
     
        public ImagePanel() {
     
        }
        public void setImage(Image image){
            this.image = image;
        }
     
        public Image getImage(Image image){
            return image;
        }
     
        public void setStreched( boolean streched ) {
            this.streched = streched;
        }
     
        public boolean isStreched() {
            return streched;
        }
     
        public Dimension getPrefferedSize(Image image){
            if ( image != null ) {
                return new Dimension(image.getWidth(null), image.getHeight(null);
            }
        }            
     
        public void paintComponent(Graphics g) {
            super.paintComponent(g); //paint background
            if (image != null) { //there is a picture: draw it            
                if( streched ) {             
                    g.drawImage(image,0,0, getWidth(), getHeight, null);
                } else {
                    g.drawImage(image, 0, 0, null); //use image size          
                }
            }
        }
    }
    Auquel on fournira en paramètre une Image chargée via la méthode ImageIO.read. (méthode qui s'assure que l'image est bien chargée à la fin de l'appel et qui lance une exception identifiable en cas de problème).

    Ensuite je te conseille de remplacer ton JTextPane Global par un simple JPanel possédant la même couleur de fond.

    Enfin quoi qu'il en soit, ton postulat de base (à savoir que l'on ne peux pas insérer des image on l'on veux dans un JTextPane) est juste incorrect

    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
    import javax.swing.ImageIcon;
    import javax.swing.JTextPane;
    import javax.swing.text.Style;
    import javax.swing.text.StyleConstants;
    import javax.swing.text.StyledDocument;
     
    public class Main {
      public static void main(String[] argv) throws Exception{
        JTextPane textPane = new JTextPane();
        StyledDocument doc = (StyledDocument) textPane.getDocument();
     
        Style style = doc.addStyle("StyleName", null);
        StyleConstants.setIcon(style, new ImageIcon("imagefile"));
     
        doc.insertString(doc.getLength(), "ignored text", style);
      }
    }

  6. #6
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut
    Merci !!

    Dsl je réponds un peu tard !

    Bon je vais reprendre tout ça grâce à ces bons conseils !

  7. #7
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut


    re, merci pour l'aide,

    j'ai essayé de reprendre mon premier code, un seul JTextPane contenant tout le texte ainsi que des images entre les paragraphes, puisque vous me dites que c'est possible d'insérer des images entre les lignes d'un JTextPane.

    J'ai réécrit ma classe Image1 comme vous me l'avez conseillé. (mais vais-je vraiment l'utiliser puisqu'on ne peut insérer que des Icon dans un JTextPane et non des images. Ou alors comment caster l'image, que je récupère grâce à Image1, en Icon ?)

    Cependant l'icon persiste à se placer tout à la fin du JTextPane







    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
     
     
     
    java.awt.*;
     
     
     
    public class ViewDossierTor extends JFrame
    {
     
     
     
    	public ViewDossierTor(Controller controller)
    	{
     
    		this.setTitle("Compte rendu du dossier");
    	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      
    	  	this.setSize(w, h);
     
    	   	JScrollPane scroll = new JScrollPane(getPanel());
    	   	scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    	   	scroll.setPreferredSize(new Dimension(190, 100));
    		this.add(scroll);
     
    	}
     
     
     
    	public JTextPane getPanel ()
    	{
     
    	JTextPane jTextPane = new JTextPane();
        	jTextPane.setEditable(true);
     
     
     
        	// définition des styles
        	Style defaut = jTextPane.getStyle("default");
        	      StyleConstants.setFontSize(defaut, 13);
          		  StyleConstants.setFontFamily(defaut, "TimesRoman");
        	Style style1 = jTextPane.addStyle("style1", defaut);
        	      StyleConstants.setFontFamily(style1, "TimesRoman");
        	      StyleConstants.setFontSize(style1, 16);
        	      StyleConstants.setBold(style1, true);
            Style style2 = jTextPane.addStyle("style2", jTextPane.getLogicalStyle());
    	          StyleConstants.setBold(style2, true);
    	          StyleConstants.setFontSize(style2, 14);
    	    Style style3 = jTextPane.addStyle("style3", jTextPane.getLogicalStyle());
                  StyleConstants.setBold(style3, true);
                  StyleConstants.setFontSize(style3, 13);        
     
     
        	      //StyleConstants.setForeground(style1, Color.BLACK);
     
     
        	String s1 = "I- PREAMBULE\n\n";
        	String s2 = "    La société ACSON a été mandatée par Monsieur "+ s_nom + " afin de réaliser l'étude acoustique de sa maison située "+ s_rue +" à "+ s_ville+ " ("+ s_codePostal+ ") .\nCette étude se fait sur plans et à partir du cahier des charges du constructeur. Elle permet de définir les isolements acoustiques des bâtiments d'habitation par rapport à l'arrêté du 30 mai 1996 en vigueur.\nNous proposerons éventuellement les matériaux à mettre en oeuvre en façade afin que les isolements soient respectés d'un point de vue règlementaire.\n\n\n";
        	String s3 = "II- APPLICATION DE L'ARRÊTE DU 30 MAI 1996\n\n";
        	String s4 = "La réglementation acoustique a évoluée en 1994 et 1995. Les textes correspondants sont appliqués depuis janvier 1996 sous le nom de Nouvelle Réglementation Acoustique ou NRA.\n\n";
        	String s5 = "La normalisation européenne a retenu:\n\n";
        	String s6 = "    Des méthodes de calcul des indices d'évaluation de la qualité acoustique d'un bâtiment.\n";
        	String s7 = "    Des indices uniques d'évaluation de la performance acoustique des produits.\n\n";
        	String s8 = "L'ensemble est transposé dans tous les pays de l'Union avant le 1er janvier 2000.\nDeux nouveaux arrêtés du 30 juin 1999 s'appliquent désormais aux bâtiments dont le permis de construrie ou la déclaration de traveaux pour la surélévation ou addition aux bâtiments existants ont été transposés après le 1er janvier 2000.\n\n";
        	String s9 = "    2.1- Les changements acoustiques\n\n";
        	String s10 = "Les principaux changements concernent:\n\n";
        	String s11 = "La réglementation: ";
        	String s12 = "Le niveau d'exigence règlementaire demandé aux constructions reste équivalent.\n";
        	String s13 = "La prescription: ";
        	String s14 = "Les nouveaux indices sont à respecter.\n";
        	String s15 = "Les produits: ";
        	String s16 = "La caractérisation des produits change.\n";
        	String s17 = "Le contrôle et mesures de réception: ";
        	String s18 = "Le calcul des limites des indices à partir des mesures est différent d'auparavant.\n\n";
           	String s19 = "    2.2- Isolement contre les bruits des transports terrestres\n\n";
        	String s20 = "La détermination de l'isolement acoustique minimal des bâtiments d'habitation contre les bruits des transports terrestres est définie par l'arrêté du 30 mai 1996.\n\n";
        	String s21 = "        2.2.1- Classement des infrastructures de transports terrestres\n\n";
        	String s22 = "Le classement des infrastructures de transports terrestres et la largeur maximale des secteurs affectés par le bruit de part et d'autre de l'infrastructure, sont définis en fonction des niveaux sonores de référence, dans le tableau suivant:\n\n";
        	String s23 = "D'autre part, le tissus urbain intervient dans la définition de l'isolement. Nous avons en tissus ouvert pour les infrastructures routières, le bord extérieur de la chaussée la plus proche:\n\n";
        	String s24 = "Les valeurs du tableau précédent tiennent compte de l'influence de condition météorologique standart. Ces valeurs peuvent être diminuées de façon à prendre en compte l'orientation de la façade par rapport à l'infrastructure, la présence d'obstacle tels un écran ou un bâtiment entre l'infrastructure et la façade pour laquelle on cherche à déterminer l'isolement, conformémént aux indications du tableau suivant:\n\n";
        	String s25 = "Selon l'exposition des façades, des corrections sont appliquées à l'isolement retenu pour la façade la plus exposée et correspondant à la situation de l'habitation par rapport à la voie la plus nuisible.\n";
        	String s26 = "Ces valeurs sont diminuées, sans toutefois pouvoir être inférieures à 30 dB(A):\n\n";
        	String s27 = "    - en effectuant un décalage d'une classe d'isolement pour les façades latérales;\n";
        	String s28 = "    - en effectuant un décalage de deux classes d'isolement pour les façades arrières.\n\n";
        	String s29 = "        2.2.2- Situation du projet\n\n";
        	String s30 = "Le projet se situe à "+s_ville+" ("+s_codePostal+"). L'habitation se trouve dans la zone des "+s_dist+" mètres de "+s_typeRoute+" "+s_codeRoute+" classée en catégorie "+s_catégorie+" en tissu ouvert.\n\n";
        	String s31 = "        2.2.3- Isolements à respecter\n\n";
        	String s32 = "Compte tenu de l'éloignement de l'habitation par rapport à la voie classée, et de la proximité de la voie de type "+s_catégorie+", l'isolement en façade doit être de "+s_face+" dB(A) sur la façade exposée face à la voie, en toiture exposée, ainsi qu'un isolement de "+s_arr+" dB(A) pour la façade "+s_orrFace+" et "+s_lat+" dB(A) pour les façades latérales.\n\n";
        	String s33 = "Les isolements s'étendent sur toutes les façades vitrées de l'habitation et concernent les pièces principales et pièces de vie.\n\n\n";
        	String s34 = "III- ANALYSE\n\n";
        	String s35 = "On s'appuie sur le logiciel ACOUBAT du C.S.T.B (Centre Scientifique et Technique du Bâtiment) pour évaluer les isolements obtenus avec les matériaux définis dans le dossier et tester quelques traitements si nécessaire.\n\n";
        	String s36 = "    3.1- Matériaux définis pour ce type de maison\n\n";
        	String s37 = "Voici les caractéristiques acoustiques des matériaux définis par le maître d'oeuvre "+s_constructeur+":\n\n";
        	String s38 = "    3.2- Calcul de l'isolement acoustique en façade\n\n";
        	String s39 = "L'isolement acoustique est tributaire des paramètres suivants:\n";
        	String s40 = " -  R = "+s_r+" dB (indice d'affaiblissement global de la paroi exposée au bruit extérieur)\n";
        	String s41 = " -  V = "+s_vol+" m3 (volume de la pièce)\n";
        	String s42 = " -  S = "+s_surf+" m2 (surface apparente au bruit)\n";
        	String s43 = " -  TL = "+s_tl+" dB (transmissions latérales)\n\n";
        	String s44 = "Les salles de bain et buanderie ne sont pas considérées comme des pièces de vie. Il en est de même pour les combles non aménageables.\n\n";
            String s45 = "    3.3- Matériaux à retenir\n\n";
            String s46 = "L'ensemble des matériaux prédéfinis ne permet pas de satisfaire les isolements en façade pour les pièces, en particulier pour les vitrages et les entrées d'air.\n";
        	String s47 = "L'ensemble des matériaux prédéfinis par le contructeur permet de satisfaire pleinement les isolements en façade pour toutes les pièces de la maison, le dossier de certification acoustique est donc clos.";
        	String s48 = "Nous proposons donc de disposer:\n\n";
        	String s50[][] = new String[7][20];
        	String s51 = "IV- CONCLUSION\n\n";
        	String s52 = "Il est impératif que le maître d'oeuvre mette en oeuvre les matériaux définis pour satisfaire une isolation de "+s_face+" dB(A) sur les façade frontales et "+s_lat+" dB(A) sur les façades latérales pour faire face aux bruits routiers.\n\n";
        	String s53 = "Les entreprises devront justifier au maître d'oeuvre ainsi qu'au maître d'ouvrage les performances de ces matériaux à l'aide des procès verbaux du CSTB ou à l'aide d'avis technique.\n\n";
        	String s54 = "Le bureau d'étude ACSON reste à votre disposition pour tout complément d'information.\n_n";
        	String s55 = "Fait à "+s_lieu_etude+", le "+s_date_etude+"                                             "+s_technicien_etude+"";
     
     
     
        	StyledDocument sDoc = (StyledDocument)jTextPane.getDocument();
     
     
     
        	try 
        	{
        	      int pos = 0;
        	      sDoc.insertString(pos, s1, style1);pos+=s1.length();
        	      sDoc.insertString(pos, s2, defaut);pos+=s2.length();
        	      sDoc.insertString(pos, s3, style1);pos+=s3.length();
        	      sDoc.insertString(pos, s4, defaut);pos+=s4.length();
        	      sDoc.insertString(pos, s5, defaut);pos+=s5.length();
        	      sDoc.insertString(pos, s6, defaut);pos+=s6.length();
        	      sDoc.insertString(pos, s7, defaut);pos+=s7.length();
        	      sDoc.insertString(pos, s8, defaut);pos+=s8.length();
        	      sDoc.insertString(pos, s9, style2);pos+=s9.length();
        	      sDoc.insertString(pos, s10, style3);pos+=s10.length();
        	      sDoc.insertString(pos, s11, style3);pos+=s11.length();
        	      sDoc.insertString(pos, s12, defaut);pos+=s12.length();
        	      sDoc.insertString(pos, s13, style3);pos+=s13.length();
        	      sDoc.insertString(pos, s14, defaut);pos+=s14.length();
        	      sDoc.insertString(pos, s15, style3);pos+=s15.length();
        	      sDoc.insertString(pos, s16, defaut);pos+=s16.length();
        	      sDoc.insertString(pos, s17, style3);pos+=s17.length();
        	      sDoc.insertString(pos, s18, defaut);pos+=s18.length();
     
     
     
     
     
        	      sDoc.insertString(pos, s19, style2);pos+=s19.length();
        	      sDoc.insertString(pos, s20, defaut);pos+=s20.length();
        	      sDoc.insertString(pos, s21, style2);pos+=s21.length();
        	      sDoc.insertString(pos, s22, defaut);pos+=s22.length();
     
     
        	      //C 'EST ICI QUE J'INSERE MON IMAGE AVEC VOTRE METHODE  
     
     
        	      try 
        	      {
        	    	  image1 = new Image1(ImageIO.read(new File("images/acson2.jpg")));
        	      } 
        	      catch (IOException e) 
        	      {
        	      }
     
     
        	      Style style = sDoc.addStyle("StyleName", null);
        	      StyleConstants.setIcon(style, new ImageIcon("images/acson2.jpg"));
        	      sDoc.insertString(sDoc.getLength(), "ignored text", style);
     
     
        	      sDoc.insertString(pos, s23, defaut);pos+=s23.length();
        	      sDoc.insertString(pos, s24, defaut);pos+=s24.length();
        	      sDoc.insertString(pos, s25, defaut);pos+=s25.length();
     
     
     
     
     
     
         	      sDoc.insertString(pos, s26, defaut);pos+=s26.length();
        	      sDoc.insertString(pos, s27, defaut);pos+=s27.length();
        	      sDoc.insertString(pos, s28, defaut);pos+=s28.length();
        	      sDoc.insertString(pos, s29, style2);pos+=s29.length();
        	      sDoc.insertString(pos, s30, defaut);pos+=s30.length();
        	      sDoc.insertString(pos, s31, style2);pos+=s31.length();
        	      sDoc.insertString(pos, s32, defaut);pos+=s32.length();
        	      sDoc.insertString(pos, s33, style3);pos+=s33.length();
        	      sDoc.insertString(pos, s34, style2);pos+=s34.length();
        	      sDoc.insertString(pos, s35, defaut);pos+=s35.length();
        	      sDoc.insertString(pos, s36, style2);pos+=s36.length();
        	      sDoc.insertString(pos, s37, defaut);pos+=s37.length();
     
     
     
     
     
        	      sDoc.insertString(pos, s38, style2);pos+=s38.length();
        	      sDoc.insertString(pos, s39, defaut);pos+=s39.length();
        	      sDoc.insertString(pos, s40, defaut);pos+=s40.length();
        	      sDoc.insertString(pos, s41, defaut);pos+=s41.length();
        	      sDoc.insertString(pos, s42, defaut);pos+=s42.length();
        	      sDoc.insertString(pos, s43, defaut);pos+=s43.length();
        	      sDoc.insertString(pos, s44, defaut);pos+=s44.length();
        	      sDoc.insertString(pos, s45, style2);pos+=s45.length();
     
     
        	} 
     
        	catch (BadLocationException e) 
        	{ 
         	}
     
    		return jTextPane;
    	}
     
     
     
     
     
    	public class Image1 extends JPanel implements Serializable
    	{ 
    		private Image image1 = null;
    		private boolean streched = false;
     
     
    	    public Image1(Image image) 
    	    { 
    	         this.image1 = image; // image de fond
    	    }
     
    	    public Image1()
    	    {
    	    }
     
    	    public void setImage1 (Image image)
    	    {
    	    	this.image1=image;
    	    }
     
    	    public Image getImage1 ()
    	    {
    	    	return image1;
    	    }
     
    	    public void setStreched (boolean streched)
    	    {
    	    	this.streched = streched;
    	    }
     
    	    public boolean isStreched()
    	    {
    	    	return streched;
    	    }
     
    	    public Dimension getPreferredSize() 
    	    { 
    	    	 return new Dimension(image1.getWidth(null), image1.getHeight(null)); 
    	    } 
     
     
    	    public void paintComponent(Graphics g)
    	    {
    	         super.paintComponents(g);
    	         if(image1 != null)
    	         {
    	        	 if(streched)
    	        	 {
    	        		 g.drawImage(image1, 0, 0, getWidth(), getHeight(), null);
    	        	 }
    	        	 else
    	        	 {
    	        		 g.drawImage(image1, 0, 0, null);
    	        	 }
    	         }
     
    	    }
    	}
     
     
     
     
    }

  8. #8
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Quand même: http://download.oracle.com/javase/6/...ImageIcon.html

    Ca doit être une des classes les plus utilisées dans du developpement Swing...

  9. #9
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut


    Ok, j'ai recherché cette fonction, mais je n'arrive pas à l'utiliser dans ma classe JFrame globale ViewDossierTor où se trouve tout le 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
     
     
     
        	      try 
        	      {
        	    	  image1 = new Image1(ImageIO.read(new File("images/tableau2.jpg")));
        	      } 
        	      catch (IOException e) 
        	      {
        	      }
     
     
        	      Style style = sDoc.addStyle("StyleName", null);
     
                  /** ERREUR ICI IL NE RECONNAIT PAS LA FONCTION ImageIcon
                  "The method ImageIcon is undefined for the type ViewDossierTor"
                  Pourtant j'ai fait les imports nécessaires....
                  **/
        	      StyleConstants.setIcon(style, ImageIcon(image1.getImage1()));
        	      //StyleConstants.setIcon(style, ImageIcon(image1.getImage1()));
        	      sDoc.insertString(sDoc.getLength(), "ignored text", style);

  10. #10
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il est amplement recommandé, voir même impératif, de ne jamais laisser les blocs catch vide.

    En effet ton code actuel ne permet pas de comprendre l'erreur qui survient

    Ajoute à minima un dans le bloc catch du try qui entoure l'ImageIO.read.

    En effet, il se pourrait que ton image ne soit pas chargée sans que tu en sois averti.

  11. #11
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut
    Ok, ça marche , merci, voilà mon code à jour:

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
     
     
     
    public class ViewDossierTor extends JFrame 
    {
     
     
        private Image1 image1;
     
     
     
    	public ViewDossierTor(Controller controller)
    	{
     
    		this.setTitle("Compte rendu du dossier");
    	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      
    	  	this.setSize(w, h);
     
    	   	JScrollPane scroll = new JScrollPane(getPanel());
    	   	scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    	   	scroll.setPreferredSize(new Dimension(190, 100));
    		this.add(scroll);
     
    	}
     
     
     
    	public JTextPane getPanel ()
    	{
     
    		JTextPane jTextPane = new JTextPane();
        	jTextPane.setEditable(true);
     
     
     
        	// définition des styles
        	Style defaut = jTextPane.getStyle("default");
        	      StyleConstants.setFontSize(defaut, 13);
          		  StyleConstants.setFontFamily(defaut, "TimesRoman");
        	Style style1 = jTextPane.addStyle("style1", defaut);
        	      StyleConstants.setFontFamily(style1, "TimesRoman");
        	      StyleConstants.setFontSize(style1, 16);
        	      StyleConstants.setBold(style1, true);
            Style style2 = jTextPane.addStyle("style2", jTextPane.getLogicalStyle());
    	          StyleConstants.setBold(style2, true);
    	          StyleConstants.setFontSize(style2, 14);
    	    Style style3 = jTextPane.addStyle("style3", jTextPane.getLogicalStyle());
                  StyleConstants.setBold(style3, true);
                  StyleConstants.setFontSize(style3, 13);        
     
     
        	      //StyleConstants.setForeground(style1, Color.BLACK);
     
     
        	String s1 = "I- PREAMBULE\n\n";
        	String s2 = "    La société ACSON a été mandatée par Monsieur "+ s_nom + " afin de réaliser l'étude acoustique de sa maison située "+ s_rue +" à "+ s_ville+ " ("+ s_codePostal+ ") .\nCette étude se fait sur plans et à partir du cahier des charges du constructeur. Elle permet de définir les isolements acoustiques des bâtiments d'habitation par rapport à l'arrêté du 30 mai 1996 en vigueur.\nNous proposerons éventuellement les matériaux à mettre en oeuvre en façade afin que les isolements soient respectés d'un point de vue règlementaire.\n\n\n";
        	String s3 = "II- APPLICATION DE L'ARRÊTE DU 30 MAI 1996\n\n";
        	String s4 = "La réglementation acoustique a évoluée en 1994 et 1995. Les textes correspondants sont appliqués depuis janvier 1996 sous le nom de Nouvelle Réglementation Acoustique ou NRA.\n\n";
        	String s5 = "La normalisation européenne a retenu:\n\n";
        	String s6 = "    Des méthodes de calcul des indices d'évaluation de la qualité acoustique d'un bâtiment.\n";
        	String s7 = "    Des indices uniques d'évaluation de la performance acoustique des produits.\n\n";
        	String s8 = "L'ensemble est transposé dans tous les pays de l'Union avant le 1er janvier 2000.\nDeux nouveaux arrêtés du 30 juin 1999 s'appliquent désormais aux bâtiments dont le permis de construrie ou la déclaration de traveaux pour la surélévation ou addition aux bâtiments existants ont été transposés après le 1er janvier 2000.\n\n";
        	String s9 = "    2.1- Les changements acoustiques\n\n";
        	String s10 = "Les principaux changements concernent:\n\n";
        	String s11 = "La réglementation: ";
        	String s12 = "Le niveau d'exigence règlementaire demandé aux constructions reste équivalent.\n";
        	String s13 = "La prescription: ";
        	String s14 = "Les nouveaux indices sont à respecter.\n";
        	String s15 = "Les produits: ";
        	String s16 = "La caractérisation des produits change.\n";
        	String s17 = "Le contrôle et mesures de réception: ";
        	String s18 = "Le calcul des limites des indices à partir des mesures est différent d'auparavant.\n\n";
           	String s19 = "    2.2- Isolement contre les bruits des transports terrestres\n\n";
        	String s20 = "La détermination de l'isolement acoustique minimal des bâtiments d'habitation contre les bruits des transports terrestres est définie par l'arrêté du 30 mai 1996.\n\n";
        	String s21 = "        2.2.1- Classement des infrastructures de transports terrestres\n\n";
        	String s22 = "Le classement des infrastructures de transports terrestres et la largeur maximale des secteurs affectés par le bruit de part et d'autre de l'infrastructure, sont définis en fonction des niveaux sonores de référence, dans le tableau suivant:\n\n";
        	String s23 = "D'autre part, le tissus urbain intervient dans la définition de l'isolement. Nous avons en tissus ouvert pour les infrastructures routières, le bord extérieur de la chaussée la plus proche:\n\n";
        	String s24 = "Les valeurs du tableau précédent tiennent compte de l'influence de condition météorologique standart. Ces valeurs peuvent être diminuées de façon à prendre en compte l'orientation de la façade par rapport à l'infrastructure, la présence d'obstacle tels un écran ou un bâtiment entre l'infrastructure et la façade pour laquelle on cherche à déterminer l'isolement, conformémént aux indications du tableau suivant:\n\n";
        	String s25 = "Selon l'exposition des façades, des corrections sont appliquées à l'isolement retenu pour la façade la plus exposée et correspondant à la situation de l'habitation par rapport à la voie la plus nuisible.\n";
        	String s26 = "Ces valeurs sont diminuées, sans toutefois pouvoir être inférieures à 30 dB(A):\n\n";
        	String s27 = "    - en effectuant un décalage d'une classe d'isolement pour les façades latérales;\n";
        	String s28 = "    - en effectuant un décalage de deux classes d'isolement pour les façades arrières.\n\n";
        	String s29 = "        2.2.2- Situation du projet\n\n";
        	String s30 = "Le projet se situe à "+s_ville+" ("+s_codePostal+"). L'habitation se trouve dans la zone des "+s_dist+" mètres de "+s_typeRoute+" "+s_codeRoute+" classée en catégorie "+s_catégorie+" en tissu ouvert.\n\n";
        	String s31 = "        2.2.3- Isolements à respecter\n\n";
        	String s32 = "Compte tenu de l'éloignement de l'habitation par rapport à la voie classée, et de la proximité de la voie de type "+s_catégorie+", l'isolement en façade doit être de "+s_face+" dB(A) sur la façade exposée face à la voie, en toiture exposée, ainsi qu'un isolement de "+s_arr+" dB(A) pour la façade "+s_orrFace+" et "+s_lat+" dB(A) pour les façades latérales.\n\n";
        	String s33 = "Les isolements s'étendent sur toutes les façades vitrées de l'habitation et concernent les pièces principales et pièces de vie.\n\n\n";
        	String s34 = "III- ANALYSE\n\n";
        	String s35 = "On s'appuie sur le logiciel ACOUBAT du C.S.T.B (Centre Scientifique et Technique du Bâtiment) pour évaluer les isolements obtenus avec les matériaux définis dans le dossier et tester quelques traitements si nécessaire.\n\n";
        	String s36 = "    3.1- Matériaux définis pour ce type de maison\n\n";
        	String s37 = "Voici les caractéristiques acoustiques des matériaux définis par le maître d'oeuvre "+s_constructeur+":\n\n";
     
     
        	String s38 = "    3.2- Calcul de l'isolement acoustique en façade\n\n";
        	String s39 = "L'isolement acoustique est tributaire des paramètres suivants:\n";
        	String s40 = " -  R = "+s_r+" dB (indice d'affaiblissement global de la paroi exposée au bruit extérieur)\n";
        	String s41 = " -  V = "+s_vol+" m3 (volume de la pièce)\n";
        	String s42 = " -  S = "+s_surf+" m2 (surface apparente au bruit)\n";
        	String s43 = " -  TL = "+s_tl+" dB (transmissions latérales)\n\n";
        	String s44 = "Les salles de bain et buanderie ne sont pas considérées comme des pièces de vie. Il en est de même pour les combles non aménageables.\n\n";
            String s45 = "    3.3- Matériaux à retenir\n\n";
            String s46 = "L'ensemble des matériaux prédéfinis ne permet pas de satisfaire les isolements en façade pour les pièces, en particulier pour les vitrages et les entrées d'air.\n";
        	String s47 = "L'ensemble des matériaux prédéfinis par le contructeur permet de satisfaire pleinement les isolements en façade pour toutes les pièces de la maison, le dossier de certification acoustique est donc clos.";
        	String s48 = "Nous proposons donc de disposer:\n\n";
        	String s50[][] = new String[7][20];
        	String s51 = "IV- CONCLUSION\n\n";
        	String s52 = "Il est impératif que le maître d'oeuvre mette en oeuvre les matériaux définis pour satisfaire une isolation de "+s_face+" dB(A) sur les façade frontales et "+s_lat+" dB(A) sur les façades latérales pour faire face aux bruits routiers.\n\n";
        	String s53 = "Les entreprises devront justifier au maître d'oeuvre ainsi qu'au maître d'ouvrage les performances de ces matériaux à l'aide des procès verbaux du CSTB ou à l'aide d'avis technique.\n\n";
        	String s54 = "Le bureau d'étude ACSON reste à votre disposition pour tout complément d'information.\n_n";
        	String s55 = "Fait à "+s_lieu_etude+", le "+s_date_etude+"                                             "+s_technicien_etude+"";
     
     
        	StyledDocument sDoc = (StyledDocument)jTextPane.getDocument();
     
     
     
        	try 
        	{
        	      int pos = 0;
        	      sDoc.insertString(pos, s1, style1);pos+=s1.length();
        	      sDoc.insertString(pos, s2, defaut);pos+=s2.length();
        	      sDoc.insertString(pos, s3, style1);pos+=s3.length();
        	      sDoc.insertString(pos, s4, defaut);pos+=s4.length();
        	      sDoc.insertString(pos, s5, defaut);pos+=s5.length();
        	      sDoc.insertString(pos, s6, defaut);pos+=s6.length();
        	      sDoc.insertString(pos, s7, defaut);pos+=s7.length();
        	      sDoc.insertString(pos, s8, defaut);pos+=s8.length();
        	      sDoc.insertString(pos, s9, style2);pos+=s9.length();
        	      sDoc.insertString(pos, s10, style3);pos+=s10.length();
        	      sDoc.insertString(pos, s11, style3);pos+=s11.length();
        	      sDoc.insertString(pos, s12, defaut);pos+=s12.length();
        	      sDoc.insertString(pos, s13, style3);pos+=s13.length();
        	      sDoc.insertString(pos, s14, defaut);pos+=s14.length();
        	      sDoc.insertString(pos, s15, style3);pos+=s15.length();
        	      sDoc.insertString(pos, s16, defaut);pos+=s16.length();
        	      sDoc.insertString(pos, s17, style3);pos+=s17.length();
        	      sDoc.insertString(pos, s18, defaut);pos+=s18.length();
     
     
     
     
     
        	      sDoc.insertString(pos, s19, style2);pos+=s19.length();
        	      sDoc.insertString(pos, s20, defaut);pos+=s20.length();
        	      sDoc.insertString(pos, s21, style2);pos+=s21.length();
        	      sDoc.insertString(pos, s22, defaut);pos+=s22.length();
     
        	      // image
     
     
        	      try 
        	      {
        	    	  image1 = new Image1(ImageIO.read(new File("images/tableau2.jpg")));
        	      } 
        	      catch (IOException e) 
        	      {
        	    	  e.printStackTrace();
        	      }
     
     
        	      Style style = sDoc.addStyle("StyleName", null);
     
        	      StyleConstants.setIcon(style, new ImageIcon(image1.getImage1()));
        	      //StyleConstants.setIcon(style, ImageIcon(image1.getImage1()));
        	      sDoc.insertString(sDoc.getLength(), "ignored text", style);
     
     
        	      sDoc.insertString(pos, s23, defaut);pos+=s23.length();
        	      sDoc.insertString(pos, s24, defaut);pos+=s24.length();
        	      sDoc.insertString(pos, s25, defaut);pos+=s25.length();
     
        	      //image
     
     
     
     
     
         	      sDoc.insertString(pos, s26, defaut);pos+=s26.length();
        	      sDoc.insertString(pos, s27, defaut);pos+=s27.length();
        	      sDoc.insertString(pos, s28, defaut);pos+=s28.length();
        	      sDoc.insertString(pos, s29, style2);pos+=s29.length();
        	      sDoc.insertString(pos, s30, defaut);pos+=s30.length();
        	      sDoc.insertString(pos, s31, style2);pos+=s31.length();
        	      sDoc.insertString(pos, s32, defaut);pos+=s32.length();
        	      sDoc.insertString(pos, s33, style3);pos+=s33.length();
        	      sDoc.insertString(pos, s34, style2);pos+=s34.length();
        	      sDoc.insertString(pos, s35, defaut);pos+=s35.length();
        	      sDoc.insertString(pos, s36, style2);pos+=s36.length();
        	      sDoc.insertString(pos, s37, defaut);pos+=s37.length();
     
     
     
     
     
        	      sDoc.insertString(pos, s38, style2);pos+=s38.length();
        	      sDoc.insertString(pos, s39, defaut);pos+=s39.length();
        	      sDoc.insertString(pos, s40, defaut);pos+=s40.length();
        	      sDoc.insertString(pos, s41, defaut);pos+=s41.length();
        	      sDoc.insertString(pos, s42, defaut);pos+=s42.length();
        	      sDoc.insertString(pos, s43, defaut);pos+=s43.length();
        	      sDoc.insertString(pos, s44, defaut);pos+=s44.length();
        	      sDoc.insertString(pos, s45, style2);pos+=s45.length();
     
     
     
        	} 
     
        	catch (BadLocationException e) 
        	{ 
         	}
     
    		return jTextPane;
    	}
     
     
     
     
     
     
    	public class Image1 extends JPanel implements Serializable
    	{ 
    		private Image image1 = null;
    		private boolean streched = false;
     
     
    	    public Image1(Image image) 
    	    { 
    	         this.image1 = image; // image de fond
    	    }
     
    	    public Image1()
    	    {
    	    }
     
    	    public void setImage1 (Image image)
    	    {
    	    	this.image1=image;
    	    }
     
    	    public Image getImage1 ()
    	    {
    	    	return image1;
    	    }
     
    	    public void setStreched (boolean streched)
    	    {
    	    	this.streched = streched;
    	    }
     
    	    public boolean isStreched()
    	    {
    	    	return streched;
    	    }
     
    	    public Dimension getPreferredSize() 
    	    { 
    	    	 return new Dimension(image1.getWidth(null), image1.getHeight(null)); 
    	    } 
     
     
    	    public void paintComponent(Graphics g)
    	    {
    	         super.paintComponents(g);
    	         if(image1 != null)
    	         {
    	        	 if(streched)
    	        	 {
    	        		 g.drawImage(image1, 0, 0, getWidth(), getHeight(), null);
    	        	 }
    	        	 else
    	        	 {
    	        		 g.drawImage(image1, 0, 0, null);
    	        	 }
    	         }
     
    	    }
    	}
     
     
     
     
    }


    Mais en revanche l'image s'affiche toujours à la fin du JTextPane,

    or je souhaiterais la placer entre des lignes


  12. #12
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut


    Ne me laissez pas tomber !


    Je souhaiterais maintenant insérer mon image (sous forme d'icône) entre deux lignes du JTextPane, mais l'icône s'affiche toujours à la fin !!

  13. #13
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Forcément, dans ton appel à l'insertString, tu places ton image à l'offset , ce qui automatiquement place ton image à la fin du document.

    Modifie donc ce paramètre pour qu'il place l'image au bon endroit.

  14. #14
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut
    J'ai remplacé par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sDoc.insertString(pos, "ignored text", style) mais ça m 'affiche toujours l'image à la fin du JTextPane

  15. #15
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pour faire simple, ajouter une image dans un JTextPane revient à ajouter une chaine à laquelle on applique un style particulier, qui fera qu'une image sera affichée à la place du texte.


    Donc si tu veux que l'image soit affichée au bon emplacement, il faut faire comme si tu ajoutais une chaine à cet endroit.


    Exemple vite fait mal fait (mais qui marche):

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    package textcomponents;
     
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextPane;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.Style;
    import javax.swing.text.StyleConstants;
    import javax.swing.text.StyledDocument;
     
    public class ImageTextPaneTest {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            JTextPane jTextPane = new JTextPane();
     
            ImageIcon icon = new ImageIcon(
                    ImageTextPaneTest.class.getResource("/result.png"));
     
            jTextPane.setEditable(true);
            // définition des styles
            Style defaut = jTextPane.getStyle("default");
            StyleConstants.setFontSize(defaut, 13);
            StyleConstants.setFontFamily(defaut, "TimesRoman");
            Style style1 = jTextPane.addStyle("style1", defaut);
            StyleConstants.setFontFamily(style1, "TimesRoman");
            StyleConstants.setFontSize(style1, 16);
            StyleConstants.setBold(style1, true);
            Style style2 = jTextPane
                    .addStyle("style2", jTextPane.getLogicalStyle());
            StyleConstants.setBold(style2, true);
            StyleConstants.setFontSize(style2, 14);
            Style style3 = jTextPane
                    .addStyle("style3", jTextPane.getLogicalStyle());
            StyleConstants.setBold(style3, true);
            StyleConstants.setFontSize(style3, 13);
     
     
            String s1 = "La réglementation acoustique a évoluée en 1994 et 1995. Les textes correspondants sont appliqués depuis janvier 1996 sous le nom de Nouvelle Réglementation Acoustique ou NRA.\n\n";
            String s2 = "La normalisation européenne a retenu:\n\n";
            String s3 = "La prescription: ";
            String s4 = "Les nouveaux indices sont à respecter.\n";
            String s5 = "Les produits: ";
            String s6 = "La caractérisation des produits change.\n";
     
            StyledDocument sDoc = (StyledDocument) jTextPane.getDocument();
     
            Style style = sDoc.addStyle("StyleName", null);
            StyleConstants.setIcon(style, icon);
     
            int pos = 0;
            try {
                sDoc.insertString(pos, s1, style1);
                pos += s1.length();
                sDoc.insertString(pos, s2, defaut);
                pos += s2.length();
                //Insertion de l'image
                sDoc.insertString(pos, "img1\n", style);
                pos += "img1\n".length();
     
                sDoc.insertString(pos, s3, style1);
                pos += s3.length();
                sDoc.insertString(pos, s4, defaut);
                pos += s4.length();
                sDoc.insertString(pos, s5, defaut);
                pos += s5.length();
                sDoc.insertString(pos, s6, defaut);
                pos += s6.length();
            } catch (BadLocationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
     
            JFrame f = new JFrame();
            f.add(new JScrollPane(jTextPane));
            f.pack();
            f.setLocationRelativeTo(null);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setVisible(true);
        }
     
    }


    Citation Envoyé par wilfryjules Voir le message
    J'ai remplacé par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sDoc.insertString(pos, "ignored text", style) mais ça m 'affiche toujours l'image à la fin du JTextPane

    Ce qui est normal si pos pointe sur la fin du document.

  16. #16
    Membre très actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 260
    Par défaut



    Ni pourrave ni pourrave, tu es GENIAL !!!!!








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

Discussions similaires

  1. [WD-2003] Insérer automatiquement un lien hypertexe dans une image
    Par ybezier dans le forum VBA Word
    Réponses: 1
    Dernier message: 29/07/2012, 20h54
  2. Réponses: 3
    Dernier message: 11/06/2012, 05h41
  3. Réponses: 13
    Dernier message: 06/04/2012, 15h57
  4. insérer une image comme objet ole dans une table
    Par Loutron dans le forum Modélisation
    Réponses: 4
    Dernier message: 29/12/2011, 19h11
  5. ecrire un texte a partir d'un point dans richedit
    Par ramanov dans le forum Langage
    Réponses: 10
    Dernier message: 07/04/2010, 13h30

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