Convertir une JTable ou mieux un Graphics2D en PNG ou JPEG

crjohnson Messages postés 6 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 12 juin 2009 - 12 juin 2009 à 20:20
crjohnson Messages postés 6 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 12 juin 2009 - 12 juin 2009 à 21:52
Salut les frères,

J'essaye d'enregistrer une JTable dans un fichier image (".png" de préférence car libre). J'ai tenté de faire cet enregistrement en la convertissant en Graphics2D mais sans succès. Je préfèrerais qu'on utilise le Graphics2D car au moins il contiendra la coloration de la table alors que la JTable en elle-même contient pas la map de couleurs.

Cet enregistrement va servir à être envoyé en pièce attachée à un e-mail avec l'A.P.I. "JavaMail", mais faudrait que j'arrive à le générer ce fichier image.

Alors j'ai essayé plein de trucs trouvés sur Internet avec "BufferedImage" et "ImageIO.write()" et la conclusion que j'en ai tirée c'est que ça fonctionne bien en faisant des "drawLine()", des "drawOval()" et compagnie mais que pour des objets comme JTable ou Graphics2D ça risque d'être plus complexe à mettre en oeuvre.

Je vous lache la classe dans laquelle je dois faire cet enregistrement :

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Properties;

import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;

class Fenetre_Email extends JFrame implements MouseListener
{
    private static final long serialVersionUID = 1L;
   
    private Fenetre_Email       THIS                     = this;
   
    private JPanel              panneau_north            = new JPanel();
    private JPanel                panneau_label_email    = new JPanel();
    private JLabel                  label_email          = new JLabel("Balance une adresse : ");
    private JPanel                panneau_champ_email    = new JPanel();
    private JFormattedTextField     champ_email          = new JFormattedTextField();
    private JPanel                panneau_bouton_ajouter = new JPanel();
    private JButton                 bouton_ajouter       = new JButton("Ajoute à la liste");
   
    private JPanel              panneau_south            = new JPanel();
    private JPanel                panneau_bouton_envoyer = new JPanel();
    private JButton                 bouton_envoyer       = new JButton("Foutez le camp !");
   
    private JPanel              panneau_center           = new JPanel();
    private JPanel[]              panneaux_emails        = new JPanel[40];
    private JLabel[]                labels_emails        = new JLabel[40];
    private JButton[]               boutons_editer       = new JButton[40];
   
    private InternetAddress     expediteur               = null;
    private InternetAddress[]   destinataires            = null;
    private InternetAddress[]   destinataires_temp       = new InternetAddress[40];
    private String              sujet                    = null;
   
    private int                 i                        = 0;
    private int                 j                        = 0;
    private int                 k                        = 0;
   
    public Fenetre_Email(JTable T, int langue) throws Exception
    {
        setTitle("*** Window ¤E-Mail¤ ***");
        setSize(200, 220);
        setResizable(false);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
       
        /* JE FAIS L'ENREGISTREMENT ICI COMME CA ON VOIT DIRECT CE QUE DONNE LE FICHIER A TITRE DE TEST. */
       
        expediteur = new InternetAddress("xxx@orange.fr");
       
        champ_email.setPreferredSize(new Dimension(100, 20));
        bouton_envoyer.setEnabled(false);
       
        panneau_label_email.add(label_email);
        panneau_champ_email.add(champ_email);
        panneau_bouton_ajouter.add(bouton_ajouter);
        panneau_bouton_envoyer.add(bouton_envoyer);
       
        panneau_north.setLayout(new GridLayout(4, 1));
        panneau_north.add(panneau_label_email);
        panneau_north.add(panneau_champ_email);
        panneau_north.add(panneau_bouton_ajouter);
       
        panneau_south.add(panneau_bouton_envoyer);
       
        getContentPane().add(panneau_north,  BorderLayout.NORTH);
        getContentPane().add(panneau_center, BorderLayout.CENTER);
        getContentPane().add(panneau_south,  BorderLayout.SOUTH);
       
        bouton_ajouter.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                labels_emails[i]   = new JLabel(champ_email.getText());
                boutons_editer[i]  = new JButton("Edit");
                panneaux_emails[i] = new JPanel();
               
                panneaux_emails[i].add(labels_emails[i]);
                panneaux_emails[i].add(boutons_editer[i]);
                panneau_center.add(panneaux_emails[i]);
               
                boutons_editer[i].addMouseListener(THIS);
               
                i++;
                panneau_center.setLayout(new GridLayout(i, 1));
                bouton_envoyer.setEnabled(true);
                setSize(getWidth(), getHeight() + 35);
            }
        });
       
        bouton_envoyer.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                j = 0;
               
                for(i=0 ; i<labels_emails.length ; i++)
                {
                    if(labels_emails[i] != null && labels_emails[i].getText().length() > 0)
                    {
                        try
                        {
                            destinataires_temp[j] = new InternetAddress(labels_emails[i].getText());
                            j++;
                        }
                        catch(Exception erreur){}
                    }
                }
               
                destinataires = new InternetAddress[j];
               
                for(i=0 ; i<j ; i++)
                { destinataires[i] = destinataires_temp[i]; }
               
                if(Envoyer())
                {
                    JOptionPane.showMessageDialog(null, "C'est bon frère.", "Jeu de jambes", JOptionPane.DEFAULT_OPTION, new ImageIcon("img/ok.png"));
                    dispose();
                }
               
                else
                { JOptionPane.showMessageDialog(null, "Et nan !", "Ah l'erreur !", JOptionPane.ERROR_MESSAGE, new ImageIcon("img/error.png")); }
            }
        });
    }
   
    public boolean Envoyer()
    {
        try
        {
            Properties proprietes = System.getProperties();
            proprietes.put("mail.smtp.host", "smtp.orange.fr");
            Session session = Session.getDefaultInstance(proprietes, null);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(expediteur);
            message.addRecipients(MimeMessage.RecipientType.TO, destinataires);
            message.setSubject(sujet);
            message.setContent("", "text/html");
           
            Transport.send(message);
           
            return true;
        }
        catch(Exception erreur) { erreur.printStackTrace(); return false;  }
    }
   
    public void mouseClicked (MouseEvent event){}
    public void mouseEntered (MouseEvent event){}
    public void mouseExited  (MouseEvent event){}
    public void mousePressed (MouseEvent event){}
   
    public void mouseReleased(MouseEvent event)
    {
        for(k=0 ; k<labels_emails.length ; k++)
        {
            if(event.getSource().equals(boutons_editer[k]))
            {
                String adresse_modifiee = (String) JOptionPane.showInputDialog(null, "Change-moi ça :", "Edit", JOptionPane.OK_CANCEL_OPTION, new ImageIcon("img/edit.png"), null, null);
               
                if(adresse_modifiee != null && adresse_modifiee.length() > 0)
                { labels_emails[k].setText(adresse_modifiee); }
            }
        }
    }
}

Merci de votre aide les gars, là je patauge mais chaud...

P.S. : Je dois réaliser ça sous la compliance 1.4.
A voir également:

2 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
12 juin 2009 à 21:14
Salut,

C'est pas très compliqué à mettre en oeuvre : voir ma source de word art pour exemple concret d'enregistrement au format PNG d'une image quelconque.
0
crjohnson Messages postés 6 Date d'inscription lundi 17 novembre 2008 Statut Membre Dernière intervention 12 juin 2009
12 juin 2009 à 21:52
Cousin j'ai cherché un peu partout mais y a tellement de fichiers sources que je trouve pas celui qui contient cette méthode. Tu pourrais m'expliquer comment on fait s'il te plaît ? Merci.
0
Rejoignez-nous