views:

234

answers:

1

Hi,

In a previous SO question, I was talking about somes issues dealing with my MDI architecture. I have now another problem when resizing my JInternalFrame. Here is a short video that illustrates it.

I have a class: Cadre which is basically my 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);


 }
}

And this is the JFrame that contains all the 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);  
 }
}

So as you can see, I have declared a: JDesktopPane inside the main JFrame of my application.

Any idea how to solve this?

Thank you!

+1  A: 

As I told you in your last posting, it is NOT a good programming practice to keep extending component just to set properties of that component. Unless you add new functionality to a class don't extend it.

The code you posted doesn't help us because it is not compileable.

Again, the Swing tutorial has a working example of how to use internal frames. So compare your code with the tutorial to see whats different. This means start with a simple internal frame that has no components in it, just a panel and see if the size works. Once you get a simple frame working, then you add your custom panel to it and see if it still works. The idea it to isolate which change you made is causing the problem. We can't do that for you.

One thing I did notice is that you are using a class call Menu. That is an AWT class and should NOT be used in a Swing application. Use the JMenu class.

If you need more help post your SSCCE that demonstrates the problem.

camickr
Ok I got it, but:1/ I might add specific properties later.2/ I've read the Swing tutorial.3/ I just thought it was a known issue :)You're right about the Menu class, didn't pay much attention about it. I'll change it to JMenu.Thanks again!
Amokrane