JWSTest.java

package fr.umlv.ji.jnlp;
import javax.jnlp.*;
import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import java.awt.datatransfer.*;
import javax.swing.*;
public class JWSTest {
  public static void main(final String[] args)
    throws UnavailableServiceException {
    // Création du menu général
    JMenu jm = new JMenu("File");
    // Image récupérée dans l'archive contenant la classe JWSTest
    // indépendamment de sa localisation (web ou cache)
    final URL url = JWSTest.class.getResource("/"+args[0]);
    final ImageIcon im = new ImageIcon(url);
    // Entrée de menu pour sauver l'image dans un fichier
    try {
      JMenuItem saveItem = new JMenuItem("Save");
      final FileSaveService fss = (FileSaveService)
    ServiceManager.lookup("javax.jnlp.FileSaveService");
      saveItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        try {
          fss.saveFileDialog(null,null,url.openStream(),args[0]);
        } catch (IOException ioe) {}
      }
    });
      jm.add(saveItem);
    } catch (UnavailableServiceException e) {}
    // Entrée de menu pour l'affichage d'une image dans le navigateur.
    try {
      JMenuItem showItem = new JMenuItem("Show");
      final BasicService bs =
    (BasicService) ServiceManager.lookup("javax.jnlp.BasicService");
      showItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        if (bs.isWebBrowserSupported())
          bs.showDocument(url);
      }
    });
      jm.add(showItem);
    } catch (UnavailableServiceException e) {}
    // Entrée de menu pour copier l'URL de l'image dans le
    // presse-papiers du système local
    try {
      JMenuItem copyItem = new JMenuItem("Copy URL");
      final ClipboardService cs = (ClipboardService)
    ServiceManager.lookup("javax.jnlp.ClipboardService");
      copyItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        cs.setContents(new StringSelection(url.toString()));
      }
    });
      jm.add(copyItem);
    } catch (UnavailableServiceException e) {}
    // Entrée de menu pour imprimer l'image
    try {
      JMenuItem printItem = new JMenuItem("Print");
      final PrintService ps = (PrintService)
    ServiceManager.lookup("javax.jnlp.PrintService");
      printItem.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        ps.print(new Printable() {
        public int print(Graphics g, PageFormat pf, int index) {
          // Imprimer une seule page  !
          if (index>0) return Printable.NO_SUCH_PAGE; 
          g.drawImage(im.getImage(),100,100,null);
          return Printable.PAGE_EXISTS;
        }
          });
      }
    });
      jm.add(printItem);
    } catch (UnavailableServiceException e) {}
    // Entrée de menu pour quitter l'application
    JMenuItem quitItem = new JMenuItem("Quit");
    quitItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      System.exit(0);
    }
      });
    jm.add(new JSeparator());
    jm.add(quitItem);
    // Création de la fenêtre et ajout des différents éléments 
    JFrame frame = new JFrame("JWSTest");
    JMenuBar jmb = new JMenuBar();
    jmb.add(jm);
    frame.setJMenuBar(jmb);
    // Affichage de l'image dans la fenêtre
    JPanel jp = new JPanel() {
    {setPreferredSize(new Dimension(im.getIconWidth(),
                    im.getIconHeight()));}
    public void paint(Graphics g) {
      g.drawImage(im.getImage(),0,0,null);
    }
      };
    frame.getContentPane().add(jp, BorderLayout.CENTER);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(false);
    frame.pack();
    frame.setVisible(true);
  }
}