2010-03-20 18 views
1

Dans un previous SO question, je parlais de certains problèmes concernant mon architecture MDI. J'ai maintenant un autre problème en redimensionnant mon JInternalFrame. Voici a short video qui l'illustre.Java - Problème lors du redimensionnement d'un JInternalFrame

J'ai une classe: Cadre qui est fondamentalement mon JInternalFrame.

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; 

/** Permet de compter le nombre de fenêtres internes ouvertes */ 
static int frameCount = 0; 

/** Permet de décaler les fenêtres internes à l'ouverture */ 
static final int xDecalage = 30, yDecalage = 30; 


public Cadre() 
{ 

    super("Form # " + (++frameCount), 
      true, //resizable 
      true, //closable 
      true, //maximizable 
      true);//iconifiable 

    // Taille de la fenêtre interne par défaut 
    width = 500; 
    height = 500; 

    // Titre par défaut 
    title = "Form # " + (frameCount); 

    // On associe une nouvelle toile à la fenêtre 
    toile = new Toile(); 
    this.setContentPane(toile); 

    // On spécifie le titre 
    this.setTitle(title); 

    // Taille de chaque form par défaut 
    this.setSize(width, height); 

    // Permet d'ouvrir les frames de manière décalée par rapport à la dernière ouverte 
    this.setLocation(xDecalage * frameCount, yDecalage * frameCount); 


} 
} 

Et c'est le JFrame qui contient toutes les JInternalFrame (s):

public class Fenetre extends JFrame 
{ 
/** Titre de la fenêtre principale */ 
private String title; 

/** Largeur de la fenêtre */ 
private int width; 

/** Hauteur de la fenêtre */ 
private int height; 

/** Le menu */ 
private Menu menu; 

/** La barre d'outils */ 
private ToolBox toolBox; 

/** La zone contenant les JInternalFrame */ 
private JDesktopPane planche; 

/** Le pannel comportant la liste des formes à dessiner*/ 
private Pannel pannel; 

/** La liste de fenêtres ouvertes */ 
private static ArrayList<Cadre> cadres; 


public Fenetre(String inTitle, int inWidth, int inHeight) 
{ 

    // lecture de la taille de la frame 
    width = inWidth; 
    height = inHeight; 

    // lecture du titre de la fenêtre 
    title = inTitle; 

    // On spécifie la taille de la fenêtre ainsi que le titre 
    this.setSize(width, height); 
    this.setTitle(title); 

    // Initialisations des listes de cadres 
    cadres = new ArrayList<Cadre>(); 

    // Instanciation de la fenêtre 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    // On définit un layout pour notre frame 
    this.setLayout(new BorderLayout()); 

    // On crée la zone supérieure : Menu + ToolBar 
    JPanel banniere = new JPanel(); 
    banniere.setLayout(new BorderLayout()); 

    // Instanciation d'un menu 
    menu = new Menu(this); 
    this.setJMenuBar(menu); 

    // En haut la ToolBox 
    toolBox = new ToolBox(); 
    this.add(toolBox, BorderLayout.NORTH); 

    // Ajout du pannel à gauche 
    pannel = new Pannel(); 
    this.add(pannel, BorderLayout.WEST); 

    **// Intialisation de la planche de dessin 
    planche = new JDesktopPane(); 

    // On ajoute une Internal frame à notre desktop pane 
    Cadre cadre = new Cadre(); 
    cadre.setVisible(true); 
    planche.add(cadre); 
    try { 
    cadre.setSelected(true); 
    } 

    catch (PropertyVetoException e) { 

    e.printStackTrace(); 
    }** 

    // Pour faire en sorte que le déplacement soit "nice" 
    planche.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); 

    // On ajoute le nouveau cadre crée à la liste des cadres 
    cadres.add(cadre); 

    // Le contenu principal de la fenêtre est la planche contenant les différentes JInternalFrame 
    this.getContentPane().add(planche); 

    this.setVisible(true); 
} 
} 

Comme vous pouvez le voir, je l'ai déclaré: JDesktopPane dans la principale JFrame de ma demande.

Une idée de comment résoudre ce problème?

Merci!

Répondre

1

Comme je vous l'ai dit lors de votre dernière publication, ce n'est PAS une bonne pratique de programmation de continuer à étendre le composant uniquement pour définir les propriétés de ce composant. À moins d'ajouter de nouvelles fonctionnalités à une classe, ne l'étendez pas.

Le code que vous avez posté ne nous aide pas car il n'est pas compilable.

Encore une fois, le didacticiel Swing présente un exemple d'utilisation des cadres internes. Alors comparez votre code avec le tutoriel pour voir ce qui est différent. Cela signifie commencer avec un cadre interne simple qui n'a aucun composant, juste un panneau et voir si la taille fonctionne. Une fois que vous obtenez un cadre simple, vous ajoutez votre panneau personnalisé et voyez si cela fonctionne encore. L'idée d'isoler le changement que vous avez fait cause le problème. Nous ne pouvons pas faire ça pour vous.

Une chose que j'ai remarquée est que vous utilisez un menu d'appel de classe. C'est une classe AWT et ne doit PAS être utilisée dans une application Swing. Utilisez la classe JMenu.

Si vous avez besoin de plus d'aide poster votre SSCCE qui démontre le problème.

+0

Ok, je l'ai eu, mais: 1/Je pourrais ajouter des propriétés spécifiques plus tard. 2/J'ai lu le tutoriel Swing. 3/Je pensais juste que c'était un problème connu :) Vous avez raison sur la classe Menu, n'a pas prêté beaucoup d'attention à ce sujet. Je vais le changer en JMenu. Merci encore! –