2010-07-31 7 views
4

La classe ScalaDoc pour la classe d'applet est assez fine sur les détails de la façon dont vous remplacez réellement la pièce d'interface utilisateur et ajoutez des composants. Il dit "Les clients doivent implémenter le champ ui. Voir la démo SimpleApplet pour un exemple."Scala applets - Démo SimpleApplet

  1. Où est cette démo SimpleApplet?
  2. À part cela, est-ce que quelqu'un a un code source simple pour utiliser la classe Scala Applet, plutôt que la classe JApplet directement?

Merci

+0

la [SimpleApplet démo est ici] (https://github.com/scala/scala/blob/master/docs/examples/swing/SimpleApplet.scala) –

+0

que Swing a déménagé dans un autre Locat GitHub ion, la démo est maintenant à https://github.com/scala/scala-swing/blob/master/docs/examples/swing/SimpleApplet.scala – Suma

Répondre

4

Le more recent ScalaDoc peut-être un peu plus utile (en particulier, la nouvelle version de ScalaDoc vous permet d'afficher/masquer des éléments en béton afin que vous puissiez vous concentrer sur ce que vous devez mettre en œuvre).

Il convient de noter que vous ne devez définir un objet nommé ui qui étend l'interface utilisateur. Ce que le ScalaDoc dit est à la fois plus précis et plus flexible - "implémenter le champ d'interface utilisateur". En raison du Uniform Access Principle, vous êtes libre d'implémenter le champ ui comme val ou object (de même, vous pouvez utiliser un val ou un var pour implémenter un def). Les seules contraintes (telles que présentées dans l'ScalaDoc comme val ui : UI) sont que

  1. l'ui doit être une interface utilisateur, et
  2. la référence à l'interface doit être immuable

Par exemple:

class MainApplet extends Applet { 
    val ui = new MainUI(Color.WHITE) 

    class MainUI(backgroundColor: Color) extends UI { 
    val mainPanel = new BoxPanel(Orientation.Vertical) { 
     // different sort of swing components 
     contents.append(new Button("HI")) 
    } 
    mainPanel.background = backgroundColor // no need for ugly _= 
    contents = mainPanel 

    def init(): Unit = {} 
    } 
} 
+0

Excellente information. Merci – I82Much

+2

Une correction mineure: 'def' peut être surchargé avec' val', mais pas l'inverse. –

+0

@Daniel - Je me suis surpris quand j'ai "prouvé" que vous pouviez remplacer un 'val' avec un' def' dans l'interprète. Il s'est avéré que j'avais oublié d'étendre le trait qui définit le val. :) Je suis content que ce n'est pas vraiment possible! –

4

enfin trouvé une source qui montre ce que vous devez faire:

http://scala-forum.org/read.php?4,701,701

import swing._ 
import java.awt.Color 

class MainApplet extends Applet { 

    object ui extends UI { 
    val mainPanel = new BoxPanel(Orientation.Vertical) { 
    // different sort of swing components 
    contents.append(new Button("HI")) 
    } 
    mainPanel.background = Color.WHITE 
    contents = mainPanel 

    def init():Unit = {} 
    } 
} 

En d'autres termes, vous définissez un objet nommé ui qui étend l'interface utilisateur. Je n'aurais jamais pensé à ça. Que ScalaDoc a besoin de travail sérieux.