Logo du forum
 

Forum TT-Hardware

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [Java] » Classe interne
Login Mot de passe

1 visiteurs sur ce topic (0 membre(s), 1 invité(s) )


Auteur
Sujet : Classe interne
Finch
Sage
Membre # 5042

 Avatar du membre
Lieu : belgique, Liège

Messages :
1763 (0.78 par jour)




Message du 22-02-2007 @ 17:13      Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Salut,
Je dois utiliser une bibliothèque en Java (Batik).
L'une des classe (JSVGCanvas) possède des classes internes (je faisais des recherches sur classe imbriquée, mais visiblemenent c'est "interne").

Code :

public class JSVGCanvas {
....

public class ZoomAction extends AffineAction {
public ZoomAction(double scale) {
super(AffineTransform.getScaleInstance(scale, scale));
}
public ZoomAction(double scaleX, double scaleY) {
super(AffineTransform.getScaleInstance(scaleX, scaleY));
}
}
...
}



Problème:
J'ai jamais vu ca de ma vie (même au cours de Java qui était quand même assez balèze), j'ai fait des recherches mais impossible de trouver la syntaxe pour appeler cette méthode. De plus NetBeans ne veut plus m'afficher la liste totale des actions possibles sur un objet, donc ca m'aide pas beaucoup.

Bref, je souhaite, dans cette exemple, faire un simple zoom.

Comment l'écrire (ma variable est: "JSVGCanvas svgCanvas")?

Merci de votre aide



[message édité le 22-02-2007 @ 17:13 Par Finch]
----------
Qui prête à rire n'est jamais sûr d'être remboursé... [R. Devos]
- Haut de page -
bambino
Sage
Membre # 8669

 Avatar du membre
Lieu : lille

Messages :
1173 (0.58 par jour)




Message du 22-02-2007 @ 20:13   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

d'une classe interne tu as acces à tous les attributs et méthode de la classe qui la contient. En revanche, d'une classe tu ne peux pas appeler les méthodes d'une classe interne.

Typiquement, ces classes ont utiles pour définir des gestionnaires d'evenement en swing.

class A{

private int cpt;

//constructeur

protected void methode(){...}

class interne{

private int cpt;

private void méthode (){...}
}

}


Quand tu es dans la classe interne, tu ne peux manipuler this.cpt, qui est l'attribut de la classe interne ou A.this.cpt qui est l'attribut de la classe A (et de meme pour les méthodes, l'accesseur this devenant superflu si tu as des noms differents dans la classe contenante,et dnas la classe interne.

en dehors de la classe interne tu ne peux pas acceder ni a ses atttributs ni a ses méthodes, c'est pour cela q'uelles sont pratique pour encapsuler les traitements.


Pour zoomer, tu ne dois donc pas appeler les methodes de ZoomAction,mais chercher dans la classe JSVGCanvas une méthode qui fait appel à un composant de type AffineAction


[message édité le 22-02-2007 @ 20:35 Par bambino]
----------
Sachant que Woody Allen a déclaré: "Quand j'écoute Wagner, j'ai envie d'envahir la pologne", quelle musique écoute Georges Bush jr?
- Haut de page -
Icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
16702 (5.78 par jour)


Score :

Message du 22-02-2007 @ 20:43   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Allez hop, le tuto de sun ;)



Les inner class (ou nested c bon aussi) sont internes pour ne pas etre public justement ;)
Elle serve au business d'un classe en particulier, tout en étant cachés. On ne peut pas les instanciés (comme une abstract) sauf dans la class parent qui la contient.

Ca peu etre parfois indispensable pour occulté du code, ainsi que point de vue organisation d'un projet(empeche la pollution visuel d'une classe qui ne sert et ne peut servir qu'a un seul endroit :o )
Ca sert egalement a transformer en objet qqc qui n'en a pas forcément besoin, pour rendre le code encore plus oo (pour transporter des propriétés et des methodes)

'fin bon, si la inner class est public, y'a toujours moyen de l'instancier, mais en général ca sert a rien :o
Dans ton cas faudrait faire
JSVGCanvas.ZoomAction zoomAction = new JSVGCanvas().new ZoomAction();
autant dire un truc porc :p


Comme dit bambino, ca sert aussi en swing a des callbacks.

dans ton cas, et d'apres la javadoc , tu devrais utiliser JSVGCanvas.ZOOM_IN_ACTION comme action sur un JButton.

... ben j'en ai profité pour chercher 2 mins, ai trouver ca si ca peut aider ;)


[message édité le 22-02-2007 @ 20:43 Par Icy]
----------
"May He touch you with His Noodly Appendage"
- Haut de page -
Finch
Sage
Membre # 5042

 Avatar du membre
Lieu : belgique, Liège

Messages :
1763 (0.78 par jour)




Message du 22-02-2007 @ 21:34   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Merci bcp pour vos réponses.

Vu que c'est pour mon mémoire, on va peut être éviter de faire un truc de "porc" :D
Sympa pour le lien Icy, j'ai pourtant chercher pas mal sur le zoom "batik" dans la doc, javadoc, exemples, google... Mais j'avais rien trouvé d'interessant.

Je testerai ça demain :)

----------
Qui prête à rire n'est jamais sûr d'être remboursé... [R. Devos]
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2006

Valid XHTML 1.0 Transitional

Page générée en 0.104 secondes