JDialog toujours devant ou accessible de la barre des taches

axi_axi_axi
Messages postés
37
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
1 juin 2005
- 17 mai 2005 à 11:01
axi_axi_axi
Messages postés
37
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
1 juin 2005
- 18 mai 2005 à 14:40
Bonjour, j'ai une JDialog qui fonctionne très bien mais lors d'un clic sur une autre fenetre, elle passe au second plan et l'on est obligé de farfouiller partout pour réussir à l'attraper la coquine. J'ai lu sur le forum des trucs intéressant mais j'avoue ne pas avoir compris le code: http://www.javafr.com/forum.v2.aspx?id=233608. Si qqun peut m'aider... c histoire de rendre mon prog plus agréable. Merci


Un stage c bien
Axi

9 réponses

micky38
Messages postés
20
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
2 juin 2005

17 mai 2005 à 11:16
Alors si tu declare ta JDialog comme ceci :

JDialog fenetre=new JDialog();

tu peux ensuite invoquer la methode "setModal()".

Par exemple : fenetre.setModal(true);

Voili voilou, j'espere avoir repondu

A+,

Mick
0
axi_axi_axi
Messages postés
37
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
1 juin 2005

17 mai 2005 à 11:37
En fait je la déclare déja comme ceci (enfin je crois que c la meme chose):
super(parent, "Configuration", true);
mais dans ce cas, si on change de fenetre et que l'on revient ensuite dessus en cliquant dans la barre des taches, la fenetre générale revient mais la JDialog est planquée en dessous. J'aimerais qu'elle revienne directement au premier plan ou alors que la JDialog s'ajoute dans la barre des taches (on pourrait alors cliquer directement dessus). En tout cas merci quand meme.


Un stage c bien mais là c dur
Axi
0
micky38
Messages postés
20
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
2 juin 2005

17 mai 2005 à 12:33
je suis aussi en stage, je doit developper un logiciel..et c'est vrai que mon appli a le meme comportement que le tien!!
Et a y reflechir, c'est un peu un probleme!!

Alors je me joint a toi en attendant une reponse claire....

a+

mick
0
axi_axi_axi
Messages postés
37
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
1 juin 2005

17 mai 2005 à 12:52
ouais tous ensemble contre cette bizarerie de java!!!


Un stage c bien mais là c dur
Axi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
axi_axi_axi
Messages postés
37
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
1 juin 2005

17 mai 2005 à 13:50
ouais tous ensemble contre cette bizarerie de java!!!


Un stage c bien mais là c dur
Axi
0
cs_Dobel
Messages postés
333
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
23 novembre 2009
1
17 mai 2005 à 22:35
Il y a peut-être une solution en mettant un WindowListener (ou autre)
sur la fenêtre mère, et en demandant de repasser le JDialog devant avec
sa méthode toFront();



mais bon, c'est surtout pour rapeller que le problème n'est pas trivial, car il dépend du Window-Manager de l'OS...

le comportement ne sera certainement pas le même sous Windows, sous
Solaris, ou sous Linux avec Gnome, KDE ou Fluxbox ou.........



il me semble d'ailleurs qu'il y a des avertissements dans la doc java,
pour prévenir que les comportements des méthodes toFront ou autres sont
incertains.


Pour ce qui est de la source que tu cites au dessus, je pense qu'il
sagit d'une méthode à mettre dans la classe JDialog, pour faire
apparaître une boîte de dialogue (enfin, j'essaye de deviner )

j'ai aucune idée de si ça marche :p, et si ça marche, je ne vois pas du tout pourquoi

en gros (je tape en live) :



class Message extends JDialog {

public Message (Frame frame, String titre) {

super(frame, titre, true); //pour la créer modale

}



public static void afficherMessage(Component parent, String titre, String message) {



Component frame = parent;

while (frame !=null && !(frame instanceof Frame) )

frame = frame.getParent (); //on remonte les parents, jusqu'à trouver une Frame



//on créé une boîte de cette classe Message

Message boite = new Message(frame, titre);



//on peut continuer la boîte ici, rajouter des boutons, afficher la String message, etc...

//...................



//dans le code que tu cites, il termine par ça, mais je ne sais pas si c'est nécessaire

boite.setResizable(false);

boite.pack();

boite.show();



}



}



et donc, tu utilises plus loin en faisant par exemple

Message.afficherMessage(this, "Bibi was here", "Hello World !");





voilà, j'espère juste ne pas avoir écrit des grosses co*****es


Dobel
[Une fois rien, c'est rien; deux fois rien,
ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà
s'acheter quelque chose, et pour pas cher]
0
axi_axi_axi
Messages postés
37
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
1 juin 2005

18 mai 2005 à 10:02
Boaf, g pas tout compris mais merci d'avoir répondu


Un stage c bien mais là c dur
Axi
0
cs_Dobel
Messages postés
333
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
23 novembre 2009
1
18 mai 2005 à 11:39
Faut pas être découragé comme ça !!!!!!!!!!!!



Bon, c'est pas facile pour tester, comme je n'ai pas le problème sous Linux (comment ça, de la propagande ?? )



bon, j'ai quand même tenté quelques petites choses.

Ce que je voulais faire au début, c'était utiliser les évènements
WindowActivated ou WindowDeActivated de WindowListener, sur la fenêtre
parente, pour repasser le dialog devant. Mais en fait, ces évènements
sont bloqués lorsque le dialogue est modal (logique...).



Je te propose donc la même chose, mais avec un dialog non modal...

c'est tapé rapidement sous JBuilder, donc c'est pe pas génial, mais bon...

c'est un cadre, lorsque tu cliques dessus, il ouvre un JDialog non
modal, et dès que le cadre est réactivé (en cliquand dessus par
exemple), il demande à placer le Dialog devant avec toFront(); (je
rapelle que toFront ne fonctionne pas systématiquement !)



sur mon Linux, ça ramène systématiquement le Dialog devant. Après, faut voir si c'est génant qu'il ne soit pas modal.

<hr size="2" width="100%">

public class Cadre1

extends JFrame implements WindowListener{

JPanel contentPane;

BorderLayout borderLayout1 = new BorderLayout();

JDialog dial;



public Cadre1() {

try {

setDefaultCloseOperation(EXIT_ON_CLOSE);

jbInit();

}

catch (Exception exception) {

exception.printStackTrace();

}



}



/**

* Initialisation du composant.

*

* @throws java.lang.Exception

*/

private void jbInit() throws Exception {

contentPane = (JPanel) getContentPane();

contentPane.setLayout(borderLayout1);

setSize(new Dimension(400, 300));

setTitle("Titre du cadre");

contentPane.addMouseListener(new
Cadre1_contentPane_mouseAdapter(this));//un écouteur sur le container
du cadre.

this.addWindowListener(this);

}





public void contentPane_mouseClicked(MouseEvent e) {

if (dial ==null || !dial.isVisible()) {// si le dialog n'existe pas déjà, on en créé un

dial = new JDialog(this, "oh, un titre", false);

dial.getContentPane().add(new JTextField("héhéhé, marrant"));

dial.pack();



dial.show();//on l'affiche

}

}



//bon, pas très propre, mais voilà les évènements de WindowListener

public void windowOpened(WindowEvent e) {

System.out.println("opened");

}

public void windowClosed(WindowEvent e) {

System.out.println("closed");

}

public void windowClosing(WindowEvent e) {

System.out.println("closing");

}

public void windowDeactivated(WindowEvent e) {

System.out.println("deactivated");

}

public void windowDeiconified(WindowEvent e) {

System.out.println("deiconified");

}

public void windowActivated(WindowEvent e) {

System.out.println("activated");

if (dial != null) {

System.out.println("là !!");

dial.toFront();

}

}

public void windowIconified(WindowEvent e) {

System.out.println("iconified");

}



}



//c'est l'écouteur de la fenêtre principale

class Cadre1_contentPane_mouseAdapter

extends MouseAdapter {

private Cadre1 adaptee;

Cadre1_contentPane_mouseAdapter(Cadre1 adaptee) {

this.adaptee = adaptee;

}



public void mouseClicked(MouseEvent e) {

adaptee.contentPane_mouseClicked(e);

}

}

<hr size="2" width="100%">

pour l'autre méthode, c'est pas la peine que je teste, comme j'ai pas le problème sous Linux :)


Dobel
[Une fois rien, c'est rien; deux fois
rien, ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà
s'acheter quelque chose, et pour pas cher]
0
axi_axi_axi
Messages postés
37
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
1 juin 2005

18 mai 2005 à 14:40
ok merci suis sur un autre truc en ce moment (une histoire policière sanglante avec d caretListener et d setDot() qui veulent pas marcher) et je vais essayer de rester concentré dessus. D'ici la fin de la semaine je répond pour te confirmer que ça marche bien...
Je sens que je vais etre obligé de poster encore. En tout cas merci bcp Dobel


Un stage c bien mais là ya d jours où ça marche pas
Axi
0