alonsyl
Messages postés348Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 6 novembre 2008
-
9 déc. 2005 à 11:25
alonsyl
Messages postés348Date d'inscriptionmardi 6 avril 2004StatutMembreDerniè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);
}
}
cs_Dobel
Messages postés333Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention23 novembre 20091 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és348Date d'inscriptionmardi 6 avril 2004StatutMembreDernière intervention 6 novembre 200812 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 !