Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
796 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  MDI : Lien entre JInternalFrame et menu documents

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MDI : Lien entre JInternalFrame et menu documents

n°906903
blueman_82
Posté le 24-11-2004 à 18:24:21  profilanswer
 

Bonjour
J'ai un petit probleme avec une application que je dois développer en java.
En fait cette application doit gérer le MDI.
Ce que je n'arrive pas à faire c'est un lien entre les différentes fenetre de l'appli (JInternalFrame) et le menu que j'ai créé et qui liste toutes les fenetres ouvertes un peu comme le menu documents ou fenetres de word).
J'ai besoin de ce lien pour pouvoir tenir à jour la liste des fenetres ouvertes.

mood
Publicité
Posté le 24-11-2004 à 18:24:21  profilanswer
 

n°907209
veryfree
Posté le 24-11-2004 à 23:30:41  profilanswer
 

tu fou une référence de chaque internalFrame dans une hashmap  

n°907214
blueman_82
Posté le 24-11-2004 à 23:32:02  profilanswer
 

merci pour ta réponse :-)
une reference ? c possible ça ?
et une hashmap m'en suis jamais servi... ça consiste en quoi ?
dsl je débute

n°907215
Jubijub
Parce que je le VD bien
Posté le 24-11-2004 à 23:32:26  profilanswer
 

impeccable, ca répond à  une question que j'allais poser...


---------------
Jubi Photos : Flickr - 500px
n°907220
Jubijub
Parce que je le VD bien
Posté le 24-11-2004 à 23:36:50  profilanswer
 

mais utiliser une table de hash, ca t'oblige à recreer ta fenetre, la hasher, et voir si t'a déjà une fenetre de ce type dans la table non ?
 
Edit : g rien dit : un iterator suffira :p ...
 
celà dit je vois tjs pas l'intéret de la table de hash sur une bete collection genre ArrayList, ou même mieux un Set (qui empeche les doublons)...
 
tu fous tes fenetres dans la collection, et tu l'itères en testant un attribut donné (comme le titre de la fenetre dont on peut supposer qu'il est unique) pour voir si elle est pas ouverte...


Message édité par Jubijub le 24-11-2004 à 23:51:01

---------------
Jubi Photos : Flickr - 500px
n°907276
veryfree
Posté le 25-11-2004 à 00:05:39  profilanswer
 

s'il ve recuperer sa frame en une instruction ?
 
 
avec ton arrayList,t'auras forcement une boucle ce sera plus long.
 
blueman_82>> une hashMap en gros c'est une clé => un objet
 
la en l'occurence:
uneCléUniqueCorrespondantAUneFrame=>InstanceDeTonInternalFrame

n°907285
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 00:08:15  profilanswer
 

oui mais il l'a récupère comment la clé ?
 
il crée une fenetre, la hash, la fout dans la map selon ce hash...
 
ensuite il la sort comment ? faut connaitre le hash, et il le retrouve où ? je croyais qu'on se servait des hashmap parce que par ex en hashant quelques attributs, on avait un hash avec une dispersion correcte, et que du coup, on pouvait facilement refabriquer le hash pour récupérer ce qu'on avait mis dans la table...


---------------
Jubi Photos : Flickr - 500px
n°907297
the real m​oins moins
Posté le 25-11-2004 à 00:15:59  profilanswer
 

Jubijub a écrit :

oui mais il l'a récupère comment la clé ?
 
il crée une fenetre, la hash, la fout dans la map selon ce hash...
 
ensuite il la sort comment ? faut connaitre le hash, et il le retrouve où ? je croyais qu'on se servait des hashmap parce que par ex en hashant quelques attributs, on avait un hash avec une dispersion correcte, et que du coup, on pouvait facilement refabriquer le hash pour récupérer ce qu'on avait mis dans la table...

euh, tu confondrais pas un peu deux notions là?
 
j'imagine que l'idée de very (j'ai pas lu tout le topic) c'est d'assigner un "nom" à une frame... tu as besoin du hash pour récuperer un objet dans une hashmap, mais juste de la clé, qui peut etre completement arbitraire par rapport à l'objet que tu lui associs. D'ailleurs faudrait parler d'une Map et nom d'une HashMap.. le coup du hash c'est une bidouille internet à l'implementation HashMap de Map (qu'il est, certes, interessant de connaitre si on veut bien utiliser HashMap et/ou bien choisir son implementation de Map en fonction de l'utilisation qu'on en aura)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°907309
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 00:20:36  profilanswer
 

c possible...
 
je croyais que ct le hash moi la clé...
 
en gros : mettons que l'objet toto aie 2 attributs : un int et le nom ...on surcharge hash pour dire que c par ex le hash du int + le hash du nom, et ca donne un bo hash qui sert de clé pour retrouver toto dans la table...
 
et du coup, sachant les valeurs des attributs int et nom, on peut refaire le hash, et récupérer toto...c pas comme ca que ca s'utilise une hashmap ? (y'a un topic de benou je crois là dessus, et c ca qu'il dit si j'ai bien suivi)...


---------------
Jubi Photos : Flickr - 500px
n°907314
blueman_82
Posté le 25-11-2004 à 00:22:44  profilanswer
 

je comprend rien :-(
moi ce que je veux faire, c'est en quelque sorte lier un JmenuItem à une JInternalFrame. dans le but de quand je ferme une JInteralFrame ben ça supprime le JmenuItem correpondant
c'est reloux de pas etre bon en java lool

mood
Publicité
Posté le 25-11-2004 à 00:22:44  profilanswer
 

n°907321
the real m​oins moins
Posté le 25-11-2004 à 00:29:06  profilanswer
 

soit t'as mal suivi, soit il a mal expliqué, soit c'est moi qui te comprend pas [:joce]

Code :
  1. public class Toto {
  2. private int i;
  3. private String name;
  4. public Toto(int i) {
  5.    this.i = i;
  6. }
  7. public int hashcode() {
  8.    return 3 + i;
  9. }
  10. }


bon, ensuite

Code :
  1. Toto a = new Toto(1);
  2. Toto b = new Toto(2);
  3. Toto c = new Toto(3);
  4. Toto d = new Toto(4);
  5. Map m = new HashMap();
  6. m.put("proute", a);
  7. m.put(b, "tralala" );
  8. m.put(c, d);


 
là, qu'est-ce qui se passe?
en (6), la map utilise la methode hashcode de String pour aller mettre "a" dans le seau qui va bien.
Pour recuperer "a", je ferai m.get("proute" ), et HashMap appelera de nouveau l'hashcode de String pour trouver le seau qui va bien, et ensuite me renverra "a" si ce qu'il trouve dans le seau est equals(), sinon il continue (bon, je reste volontairement flou sur l'histoire des seaux, faudrait relire, mais bref)
 
bref, idem pour les 2 autres cas, sauf que là ça sera forcement la methode hashcode de Toto qui sera utilisée, mais moi derriere pour recuperer le String "tralala" ou "d", je ferais m.get(b) ou m.get(c)
 
en clair, la methode hashcode, c'est pas un truc que tu utilises dans du code "business", c'est de la popote interne pour des trucs plus bas niveau... genre HashMap, donc.
 
 
 [:krapo]  
 
(toute information contenue dans ce post est donnée sous reserve d'erreur non-contractuelle ... enfin un truc dans le genre)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°907324
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 00:31:08  profilanswer
 

-->blueman_82
 
heu, si j'ai suivi, tu veux qu'à n'importe quel instant t, t au max qu'une seule fenetre d'un type donné d'ouverte, c bien ca ? cad si t'a 3 fenetres titi toto tata, tu veux pas qu'on puisse ouvrir 2 titi en meme temps ?
 
ce sur quoi on discute, c le fait de ranger des références aux fenetres ouvertes dans une Collection, et l'idée c de vérifier si on a une référence à la fenetre avant de l'ouvrir : si oui, on va chercher la fenetre, sinon, on la crée, et range la référence dans le tableau...tout en pensant, avec des FrameEvent, à sortir la fenetre du tableau de ref qd elle est fermée


Message édité par Jubijub le 25-11-2004 à 00:36:53

---------------
Jubi Photos : Flickr - 500px
n°907326
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 00:36:32  profilanswer
 

the real moins moins a écrit :


des choses intéressantes


 
ce que tu veux me dire c qu'on peut mettre totalement n'importe quoi comme clé, la hashmap la hash, et rentre la valeur dans le bucket qui correspond à la clé...
 
question : que se passe-t-il si on rentre 2 trucs avec la meme clé ? (benou par le de sac de billes, ce qui implique que plusieurs choses peuvent se trouver dans la meme clé...ou alors qu'il stocke une collection comme objet correspondant à la clé)...
 
donc pour l'exemple courant, on dit que par ex on fait un getTitle() sur chaque frame, on peut ranger la frame selon sa clé "title", et donc pour récupérer la fenetre "toto", on va faire un get("toto" )... c ca ?


---------------
Jubi Photos : Flickr - 500px
n°907328
blueman_82
Posté le 25-11-2004 à 00:37:54  profilanswer
 

http://bluezone.free.fr/screen.JPG
 
alors voila à quoi ressemble mon interface.
j'ai la possibilité via le mnu fichier d'ouvrir autant de fenetre que je veux.
à l'ouverture d'une fenetre, le menu Documents est aussi tot complété par un sous menu qui permet d'afficher la fenetre en question.
la difficulté du truc c'est de supprimer ses sous menu lorsque la fenetre "cible" a été fermée par l'utilisateur.

n°907331
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 00:42:21  profilanswer
 

ahhhhhhhhhhhhh, tu veux faire comme le menu "Fenetres" en gros...
 
ben là c facile : tu colles un windowListener à tes internalFrame, et tu captures :  
 public void windowClosed(WindowEvent e) {
 
    }
 
cette méthode s'exécutera à la fermeture des fenetres...


---------------
Jubi Photos : Flickr - 500px
n°907332
the real m​oins moins
Posté le 25-11-2004 à 00:43:00  profilanswer
 

Jubijub a écrit :

ce que tu veux me dire c qu'on peut mettre totalement n'importe quoi comme clé, la hashmap la hash, et rentre la valeur dans le bucket qui correspond à la clé...
 
question : que se passe-t-il si on rentre 2 trucs avec la meme clé ? (benou par le de sac de billes, ce qui implique que plusieurs choses peuvent se trouver dans la meme clé...ou alors qu'il stocke une collection comme objet correspondant à la clé)...
 
donc pour l'exemple courant, on dit que par ex on fait un getTitle() sur chaque frame, on peut ranger la frame selon sa clé "title", et donc pour récupérer la fenetre "toto", on va faire un get("toto" )... c ca ?

à voir comment c'est implementé pour savoir comment il fait, mais le contrat dit que de toutes façons il vérifie avec un equals() avant de te renvoyer l'objet:

Citation :

More formally, if this map contains a mapping from a key k to a value v such that (key==null ? k==null : key.equals(k)), then this method returns v; otherwise it returns null. (There can be at most one such mapping.)


 
quand tu entres plusieurs object avec la même clé, seul les dernier reste.
quand tu entres plusieurs objets avec une clé differente, mais que ces clés ont un hashcode identique, tous ces objet restent dans la map, c'est juste anti-performant.
 
et donc pour l'exemple courant, oui.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°907336
blueman_82
Posté le 25-11-2004 à 00:47:16  profilanswer
 

Jubijub a écrit :

ahhhhhhhhhhhhh, tu veux faire comme le menu "Fenetres" en gros...
 
ben là c facile : tu colles un windowListener à tes internalFrame, et tu captures :  
 public void windowClosed(WindowEvent e) {
 
    }
 
cette méthode s'exécutera à la fermeture des fenetres...


 
oui biensur j'ai fait ça :-)
et j'arrive à fermer la fenetre sans soucis et récupérer l'event
mais le truc ce que je recupere pas l'objet jmenuitem pour pouvoir le supprimer à son tour

n°907343
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 00:55:09  profilanswer
 

faut le foutre dans une collection quelconque, et tu le vire ensuite...par contre je sais pas si les menus ont un event pour forcer leur rafraichissement


---------------
Jubi Photos : Flickr - 500px
n°907345
blueman_82
Posté le 25-11-2004 à 00:57:02  profilanswer
 

nan ils ont pas d'event mais une methode pour supprimer un item quand tu passes l'objet en parametre

n°907347
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 00:59:45  profilanswer
 

et ben tu utilises la hashmap comme l'a montré moinsmoins : en clé tu met le nom de la fenetre, et en objet le menuItem ...
 
du coup qd tu fermes une fenetre, tu récupères son titre, ca te donne le menuItem, et t'a plus qu'à le supprimer et à demander un refresh du menu (si c pas automatique après une suppression)


---------------
Jubi Photos : Flickr - 500px
n°907348
the real m​oins moins
Posté le 25-11-2004 à 01:00:42  profilanswer
 

(sur l'event du menu tu recuperes le menuitem? :heink: )


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°907349
the real m​oins moins
Posté le 25-11-2004 à 01:01:29  profilanswer
 

(et sinon bah ce qu'a suggéré veryfree en premier, c'est de mapper la fenetre sur le menuitem, pas besoin d'une indirection sur le nom)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°907350
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 01:02:30  profilanswer
 

heu non pas du tout : je me demandais si qd on altérai un menu y'avait un event pour dire au menu qu'il avait changé (par ex qd t'altères une Table, le tablemodel a un event pour dire que les données ont pu changer, et qu'il faut faire un refresh)


---------------
Jubi Photos : Flickr - 500px
n°907351
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 01:03:46  profilanswer
 

the real moins moins a écrit :

(et sinon bah ce qu'a suggéré veryfree en premier, c'est de mapper la fenetre sur le menuitem, pas besoin d'une indirection sur le nom)


 
cad concrètement ?
 
si g suivi son affaire, il veut que si on vire la fenetre, le menuitem saute aussi...


---------------
Jubi Photos : Flickr - 500px
n°907354
the real m​oins moins
Posté le 25-11-2004 à 01:05:57  profilanswer
 

Jubijub a écrit :

heu non pas du tout : je me demandais si qd on altérai un menu y'avait un event pour dire au menu qu'il avait changé (par ex qd t'altères une Table, le tablemodel a un event pour dire que les données ont pu changer, et qu'il faut faire un refresh)

ha, visuellement.
euh je sais pas mais je crois que c'est "automatique" :??:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°907355
the real m​oins moins
Posté le 25-11-2004 à 01:06:41  profilanswer
 

Jubijub a écrit :

cad concrètement ?
 
si g suivi son affaire, il veut que si on vire la fenetre, le menuitem saute aussi...

map.put(frame, menuitem);
 
JMenuItem menuItemToRemove = map.get(frame);
menu.remove(menuItemToRemove);
 
 
[:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°907361
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 01:16:59  profilanswer
 

lol je l'avais proposé en inversant...mais gt pas loin ...oui c pas con du tout en y réfléchissant :)


---------------
Jubi Photos : Flickr - 500px
n°907363
the real m​oins moins
Posté le 25-11-2004 à 01:19:40  profilanswer
 

y'a des implementations de map bi directionnelles je crois, sinon.
(si on veut pas se faire chier, on agrege deux map et hop)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°907364
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 01:20:34  profilanswer
 

cad agéger ?


---------------
Jubi Photos : Flickr - 500px
n°907367
the real m​oins moins
Posté le 25-11-2004 à 01:24:06  profilanswer
 

Code :
  1. class MaSuperMapQuiPrendDesDeuxCotes(
  2. Map normal;
  3. Map reverse;
  4. public void put(Object k, Object v) {
  5.   normal.put(k,v);
  6.   reverse.put(v,k);
  7. }
  8. public Object get(Object k) {
  9.   Object result = normal.get(k);
  10.   if (result == null) {
  11.     result = reverse.get(k);
  12.   }
  13.   return result;
  14. }


 
un truc dans la genre
 


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°907370
Jubijub
Parce que je le VD bien
Posté le 25-11-2004 à 01:27:36  profilanswer
 

c bien ce que je pensais...


---------------
Jubi Photos : Flickr - 500px
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  MDI : Lien entre JInternalFrame et menu documents

 

Sujets relatifs
[XHTML/CSS/JS] menu déroulantje veux des documents clipper
Liste menu (forumlaire), prob de transmission de valeurMenu déroulant
Probléme de menu en batchforum phpbb : comment créer un lien sur le logo en haut à gauche ?
Afficher le lien d'une image dans une textbox?Menu Contextuel dynamique (.Net)
menu figé sous IElien HTML crée à partir d'un script perl
Plus de sujets relatifs à : MDI : Lien entre JInternalFrame et menu documents


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR