Esempio breve ma che ti mostra un po' di cose.
(J)Applet:
codice:
import javax.swing.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class daJApplet extends JApplet {
JLabel title, immagine;
JButton htmlit;
AppletContext ac;
public void init() {
this.setLayout(new BorderLayout());
title = new JLabel("Questa è una JApplet");
htmlit = new JButton("Vai html.it");
ac = this.getAppletContext();
try {
immagine = new JLabel(new ImageIcon(this.getClass().getResource("logo2.gif")));
}
catch (Exception e) {
e.printStackTrace();
}
this.add(title, BorderLayout.NORTH);
this.add(immagine, BorderLayout.CENTER);
this.add(htmlit, BorderLayout.SOUTH);
htmlit.addActionListener(new AbstractAction() {
public void actionPerformed (ActionEvent ae) {
try {
ac.showDocument(new URL("http://www.html.it"));
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
public static void main (String[] args) {
System.out.println("Questa è un applet");
}
}
e relativo HTML di test
codice:
<html>
<head>
<title>Prova JApplet HTML.IT</title>
</head>
<body>
<applet height="200" width="300" code="daJApplet.class">
</applet>
</body>
</html>
Invece questa è l'applicazione Stand-Alone
codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
public class aStandAlone extends JFrame {
JLabel title,immagine;
JButton htmlit;
private String openBrowser = "cmd /k START iexplore.exe http://www.html.it";
public aStandAlone() {
super("Applicazione di Test per il forum di HTML.IT");
this.getContentPane().setLayout(new BorderLayout());
title = new JLabel("Questa è un'applicazione Stand-Alone");
htmlit = new JButton("Vai a HTML.IT");
try {
immagine = new JLabel(new ImageIcon(new URL("http://utenti.html.it/common/img/logo2.gif")));
}
catch (Exception e) {
e.printStackTrace();
}
htmlit.addActionListener(new AbstractAction() {
public void actionPerformed (ActionEvent ae) {
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec(openBrowser);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
this.getContentPane().add(title, BorderLayout.NORTH);
this.getContentPane().add(immagine, BorderLayout.CENTER);
this.getContentPane().add(htmlit, BorderLayout.SOUTH);
this.setResizable(false);
this.setSize(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main (String[] args) {
aStandAlone asa = new aStandAlone();
}
}
Principali differenze:
La JApplet funziona bene come contenitore; i vari elementi grafici sono inizializzati in init() e lì aggiunti direttamente alla JApplet. Una JApplet di norma non può accedere alle risorse esterne al percorso in cui è radicata, per cui per mostrare il logo di html.it ho dovuto scaricarlo e salvarlo nella cartella dove l'applet risiede. Il modo di caricare l'immagine (via getResource) ti facilita nel caso in cui volessi impacchettare il tutto in un jar. Nota, questo sistema può (anzi deve) essere utilizzato anche per le applicazioni Stand-Alone impacchettate nei jar per caricare i file nel jar stesso.
Vantaggio dell'applet è che lei sa benissimo di trovarsi e girare in un browser, per cui aprire un link è molto semplice.
L'applicazione Stand-Alone invece è meno restrittiva nel caricamento di risorse esterne (guarda come ho caricato il file di immagine dando direttamente l'url del file gif ad ImageIcon), però non sa minimamente dove stia girando, ed infatti per far aprire il link ho dovuto usare quell'acrocchio con l'esecuzione di un comando a runtime. Per il resto, a parte il getContentPane di cui ti avevo già accennato, il sistema è molto simile e facilmente traducibile (di norma è molto più facile tradurre un'applet in un'applicazione in frame che non il viceversa, causa restrizioni imposte alla JVM che esegue applet).
Saluti.