Je suis la programmation d'un programme court de peinture comme je suis en train de faire pour lui une architecture MDI. Pour y arriver, j'ai utilisé JInternalFrame dans un JDesktopPane. Bien que j'obtienne en quelque sorte plusieurs images, elles ne fonctionnent pas vraiment correctement. Fondamentalement, si j'ai 2 JInternalFrame je ne peux dessiner que sur le dernier. L'autre semble être désactivé.Java - Comment rendre un ensemble de JInternalFrame indépendant les uns des autres?
Voici une courte vidéo illustrant le problème. http://bit.ly/9ydiwM
Voici une partie du code.
Panneau.java
public class Panneau extends JDesktopPane
{
/** La liste de fenêtres ouvertes */
private static ArrayList<Cadre> cadres;
/** Le pannel comportant la liste des formes à dessiner*/
private Pannel pannel;
/** La barre d'outils */
private ToolBox toolBox;
public Panneau()
{
this.setLayout(new BorderLayout());
// Initialisations des listes de cadres
cadres = new ArrayList<Cadre>();
// En haut ToolBox
toolBox = new ToolBox();
this.add(toolBox, BorderLayout.NORTH);
**// Intialisation de la première internal frame
Cadre cadre = new Cadre();
this.add(cadre, BorderLayout.CENTER);**
cadres.add(cadre);
// Ajout du pannel à gauche
pannel = new Pannel();
this.add(pannel, BorderLayout.WEST);
}
/**
* Crée une nouvelle fenêtre de dessin
*
*/
**public void createNewInternalFrame()
{
Cadre cadre = new Cadre();
this.add(cadre, BorderLayout.CENTER);
cadres.add(cadre);
}**
}
public class Cadre extends JInternalFrame
{
/** Largeur par d'une fenêtre interne */
private int width;
/** Hauteur d'une fenêtre interne */
private int height;
/** Titre d'une fenêtre interne */
private String title;
/** Toile associée à la fenêtre interne */
private Toile toile;
public Cadre()
{
width = 400;
height = 400;
title = "Form";
toile = new Toile();
this.setTitle(title);
this.setSize(width, height);
this.setEnabled(true);
this.setResizable(true);
this.setAutoscrolls(true);
this.setClosable(true);
this.setIconifiable(true);
this.setDoubleBuffered(true);
this.setContentPane(toile);
this.setVisible(true);
this.pack();
}
}
Fondamentalement, Panneau est la fenêtre principale qui contient toutes les différentes parties de l'interface graphique. Je peux créer autant de JInternalFrame que je veux, en utilisant: Panneau.createNewInternalFrame(). Toile est essentiellement où je dessine mes formes.
Une idée?
Merci
Vous aviez raison. J'ai changé la façon dont mon interface graphique a été construite. Maintenant, j'ai un JFrame au lieu d'un JPanel et ça marche très bien!Il y a juste un petit problème: je ne peux pas redimensionner aucun de mes JInternalFrame (s). Quand j'essaie de le faire, ils se placent dans le coin supérieur et ils semblent être handicapés. –
Encore une fois, le tutoriel Swing a des exemples de travail qui utilisent des cadres internes et ils ne présentent pas ce comportement. Je n'ai aucune idée de ce que vous pourriez faire différemment. Comparez votre code avec le code du didacticiel pour voir ce qui est différent. – camickr