30. januar 2003 - 20:26Der er
15 kommentarer og 2 løsninger
Applet eller JApplet
Hvad er der af fordele og ulemper ved Applets kontra JApplets? JApplets ser bedre ud, men er der mange der ikke kan bruge dem? Kan der evt. laves en løsning som viser en JApplet hvis det er muligt, og en Applet ellers?
Hvis jeg husker rigtigt så er Applet AWT og JApplet Swing.
Uden på nogen måde at være applet ekseprt vil jeg formode, at JApplet generelt er bedre, fordi Swing er bedre end AWT.
Og problemet er at MS's antikke JVM ikke understøtter Swing.
Jeg har umiddelbart svært ved at forestille mig at man kunne lave en combo, men det må du hellere få en melding på fra nogle mere applet kyndige end mig.
carsten > som illustrerer hvad? Jeg kan godt finde ud af at lave det, jeg ved bare ikke om jeg skal satse på Applet eller JApplet.
magoo > er der noget tekst i dit svar, eller er det en fejl? Jeg kan ikke se nogen tekst, men på et tidspunkt kunne jeg heller ikke se mit eget spørgsmål...
Mit svar hvordi jeg påpegede at det er nemt at finde JVM versionen, men svært at arve fra den ene eller anden klasse afhængig af svaret er også sporløstt forsvundet !
Det begynder at se lidt nedslående ud... Jeg skal bla. have to lister der følges ad når man scroller (så linie 5 hele tiden står ud for linie 5 osv.). Jeg har tidligere lavet dette med Swing, men ved nærmere eftersyn er jeg da slet ikke sikker på at det kan gøres med AWT... (jeg har aldrig rigtig brugt det, så jeg ved det ikke).
Jeg prøver at lave noget ud fra magoos svar; det må være System.getProperty("java.vm.version") jeg skal bruge, men er der nogen der kan sige mig hvilke versioner der kan bruge Swing?
Jeg har siddet og leget lidt med det, og er nu kommet frem til noget jeg synes virker ret besynderligt, men som klogere folk måske kan forklare mig... Jeg har bla.:
public void init(){ try{ jtext = new javax.swing.JTextField("bla bla"); swi = true; } catch(Exception e){}
if(swi) { // her kommer det sjove! } }
Hvis jeg nu indsætter jtext2 = new javax.swing.JTextField("bla"); i if-sætningen er der ingen problemer. Den læses jo kun hvis swi er sat til true, så det virker rimeligt nok. Men hvis jeg fx skriver jtext.setText("bla"); - eller hvad jeg ellers kan finde på at gøre ved jtext - går den i baglås (exception: java.lang.ClassNotFoundException: javax.swing.text.JTextComponent). Og det fatter jeg ikke, den skal jo slet ikke læse noget inde i den if-sætning! Endnu mere absurd virker det at hvis jeg skriver if(false) i stedet for if(swi) kan den også godt håndtere det sidste eksempel...
"Den" er forresten IE5, som ikke kan klare swing. Den kunne heller ikke lide System.getProperty(), så jeg kom på ovenstående konstruktion i stedet.
import javax.swing.*; import java.applet.Applet; /** * Created by IntelliJ IDEA. * User: Martin * Date: Feb 1, 2003 * Time: 5:08:48 PM * To change this template use Options | File Templates. */
public class App extends JApplet { javax.swing.JTextField jtext; javax.swing.JTextField jtext2; static boolean swi = false;
public void init() { getContentPane().setLayout(new BorderLayout());
Så skal du nok lave to subklasser - en til swt og en til swing, for det du prøver på, kan ikke lade sig gøre uden at arve fra JApplet(ved swing) eller Applet (ved awt).
public class test extends Applet { javax.swing.JButton jb; Button b = new Button("knap"); static boolean swi = false;
public void init(){ try{ jb = new javax.swing.JButton("swing-knap"); swi = true; } catch(Exception e){}
if(swi) { add(jb); } else add(b); } }
Min "swing-browser" gør præcis det den skal (viser en swing-knap), og hvis jeg udkommenterer linien "add(jb);" gør "ikke-swing-browseren" det også (viser en alm. knap). Det eneste problem er at "ikke-swing-browseren" brokker sig over indholdet af if-sætningen, selv om den slet ikke skal bruge det. Jeg indrømmer gerne at jeg ikke ved så meget om det her, så hvis du igen siger at det ikke kan lade sig gøre tror jeg på det, jeg synes bare det er en meget mærkelig måde det viser sig på.
Problemet mellem swing og awt er at swing komponenter kræver en look-and-feel (se evt. javax.swing.plaf) for at blive renderet. Desuden er opbygningen med glass, content og root panes heller ikke guld sammen med awt. Det kan lade sig gøre at lave hæderlige appletter med AWT. Man skal kæmpe mod manglende double buffer ved gentegning og en lidt stivere Event håndtering. Denne applet er 100% AWT: http://morrowind.melian.cc/potionmachine/ Ganske nysselig og næsten alle komponenter er hardcoded underklasser af Component. Det er tilgengæld tydeligt at jeg ikke fik lavet et dobbelt bufferet Panel (tsk tsk), men det skulle da kunne lade sig gøre hvis tiden havde været der. Sig til hvis der er nogen, som er interesserede i at jeg laver en lille tutorial i lightweight AWT komponenter. Er selv stort set autodedakt så det bliver på lægmandssprog. AWT tillader ikke at man arver fra TextComponent, da denne har protected constructor. Så hvis man skal lave det mindste tekst layout (HTML o.s.v.) er man NØD til at bruge swing. Min egen (beskedne) erfaring er AWT == tungt, men fleksibelt og bedre browser kompatibilitet. swing == let og gennemført, men sværere at udbygge.
mht. at lave en swing applet, der samtidigt kan bruges med gamle browsere tvivler jeg på at det kan lade sig gøre. Hvis man vitterligt er opsat på at lave to versioner vil jeg foreslå et javascript til at bestemme indholdet af applet/object tagget afhængig af browseren. Ellers kan jeg kun tænke mig til en Classloader løsning (med hvilket jeg har 0 erfaring).
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.