Bizarrerie ?!

Résolu
alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 - 9 déc. 2005 à 11:25
alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 - 9 déc. 2005 à 15:27
bonjour,



dans le programme suivant je construis une JFrame avec une JInternalFrame.
comme vous pourrez le constater, la JinternalFrame est appelle dans le constructeur de la fenetre MDI et en cliquant sur "fichier => ouvrir".
le truc c'est que j'essais de maximiser la JInternalFrame mais cela ne fonctionne que lorsqu'elle est appelée dans le constructeur de la fenetre principale.
a quoi cela est-il du ? le constructeur de la JInternalFrame et pourtant unique !
comment contrecarrer ce phenomene ?

import java.awt.event.*;
import javax.swing.*;


public class FenMere extends JFrame implements ActionListener {

public JDesktopPane dtp = new JDesktopPane();
public JMenuBar menuDeroulant = new JMenuBar();
public JMenu fichier = new JMenu("Fichier");
public JMenuItem ouvrir = new JMenuItem("Ouvrir");

public FenMere() {
setJMenuBar(menuDeroulant);
ouvrir.addActionListener(this);
fichier.add(ouvrir);
menuDeroulant.add(fichier);

FenFille f2 = new FenFille();
dtp.add(f2);

add(dtp);
setSize(1000,500);
}


public void actionPerformed(ActionEvent ev) {
Object source = ev.getSource();
if (source == ouvrir) {

FenFille f2 = new FenFille();
dtp.add(f2);
}
}


public class FenFille extends JInternalFrame {
public FenFille() {
setSize(150, 150);
setClosable(true);
try {
setMaximum(true);
} catch (Exception e) {
}
setVisible(true);
}
}


public static void main(String[] args) {
FenMere frame = new FenMere();
frame.setVisible(true);
}
}

merci a vous,



alonsyl

2 réponses

cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
9 déc. 2005 à 13:46
En fait, ce qui est étonnant, c'est que ça marche quand tu le fais depuis le constructeur :)



pour débugger le truc, première chose, afficher les messages des exceptions :)

on voit :

java.lang.NullPointerException

at javax.swing.DefaultDesktopManager.maximizeFrame(DefaultDesktopManager.java:90)

... plein de blabla



En regardant le code source de DefaultDesktopManager, on constate que
pour agrandir une frame, il a besoin de la dimension du parent (ici, le
JDesktopPane), assez logique



Au moment où du appelles setMaximum dans ton constructeur, la frame
interne ne connaît pas encore son JDesktopPane parent, elle ne peut
donc pas savoir quelle dimension elle doit prendre :)



Il faut donc agrandir ta frame après l'avoir construite et ajouter au JDesktopPane.


voilà :)

A+
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]
alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 12
9 déc. 2005 à 15:27
grand merci a toi Dobel !

je debute en java et je ne m'etais encore jamais interesse a regarder le code source des bibliotheques qui me sont proposees ... je saurais ce qu'il me reste a faire la prochaine fois que quelque chose de ce genre se produit !

@+,

alonsyl
Rejoignez-nous