Error: adding a window to a container

Signaler
Messages postés
4
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
26 avril 2003
-
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
-
Bonjour
j'ai l'erreur "adding a window to a container"
lors de l'execution de non petit programme qui est le suivant

(si vous avez une solution n'hesiter de m'emvoyé la réponse le plus rapidement possible.Merci)

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

public class TabbedPaneDemo extends JFrame {
public TabbedPaneDemo() {
ImageIcon icon = new ImageIcon("middle.gif");
JTabbedPane tabbedPane = new JTabbedPane();

Component panel1 = makeTextPanel("Blah");
tabbedPane.addTab("One", icon, panel1, "Does nothing");
tabbedPane.setSelectedIndex(0);

Component panel2 = makeTextPanel("Blah blah");
tabbedPane.addTab("Two", icon, panel2, "Does twice as much nothing");

Component panel3 = makeTextPanel("Blah blah blah");
tabbedPane.addTab("Three", icon, panel3, "Still does nothing");

Component panel4 = makeTextPanel("Blah blah blah blah");
tabbedPane.addTab("Four", icon, panel4, "Does nothing at all");

JPanel tabpanel=new JPanel();
tabpanel.setLayout(new BoxLayout(tabpanel, BoxLayout.Y_AXIS));
tabpanel.add(tabbedPane);

JPanel buttonPane=new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));

JButton okButton=new JButton("OK");
//okButton.setActionCommand("OK");
//okButton.addActionListener(this);
JButton cancelButton=new JButton("Cancel");
//cancelButton.setActionCommand("Cancel");
//cancelButton.addActionListener(this);
buttonPane.add(okButton);
buttonPane.add(cancelButton);
buttonPane.setAlignmentX(Component.CENTER_ALIGNMENT);

buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
buttonPane.add(Box.createHorizontalGlue());
buttonPane.add(okButton);
buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
buttonPane.add(cancelButton);

Container contentPane = getContentPane();
contentPane.add(tabpanel, BorderLayout.CENTER);
contentPane.add(buttonPane, BorderLayout.SOUTH);
//pack();

}

protected Component makeTextPanel(String text) {
JPanel panel = new JPanel(false);
JLabel filler = new JLabel(text);
filler.setHorizontalAlignment(JLabel.CENTER);
panel.setLayout(new GridLayout(1, 1));
panel.add(filler);
return panel;
}

public static void main(String[] args) {
JFrame frame = new JFrame(";jkjhlkj");
TabbedPaneDemo a = new TabbedPaneDemo();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});

frame.getContentPane().add(new TabbedPaneDemo(),
BorderLayout.CENTER);

frame.setSize(400, 300);
//frame.setResizable(false);
frame.setVisible(true);
}
}
A voir également:

7 réponses

Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
En principe l'erreur est accompagné du numéro de ligne où se trouve l'erreur.

Mais en général un Window représente une fenêtre or c'est vrai tu ne peut pas mettre une fenétre dans un conteneur (comme un JPanel) car c'est très bizarre de mettre une fenêtre à l'intérieur d'une autre (a ne pas confondre avec une application MDI, ca n'a rien à voir !)

Plutot qu'une instance de Window tu devrais mettre une instance de JPanel dans ton conteneur

Core Breaker :)
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Correction:

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

public class TabbedPaneDemo extends JFrame {
public TabbedPaneDemo() {
  super(";jkjhlkj"); // Titre
  setDefaultCloseOperation(EXIT_ON_CLOSE); //Remplace l'utilisation du WindowAdapter dans la méthode main
  setSize(400, 300); // Remplace l'appel dans la methode main

ImageIcon icon =  new ImageIcon("middle.gif");
JTabbedPane tabbedPane = new JTabbedPane();

Component panel1 = makeTextPanel("Blah");
tabbedPane.addTab("One", icon, panel1, "Does nothing");
tabbedPane.setSelectedIndex(0);

Component panel2 = makeTextPanel("Blah blah");
tabbedPane.addTab("Two", icon, panel2, "Does twice as much nothing");

Component panel3 = makeTextPanel("Blah blah blah");
tabbedPane.addTab("Three", icon, panel3, "Still does nothing");

Component panel4 = makeTextPanel("Blah blah blah blah");
tabbedPane.addTab("Four", icon, panel4, "Does nothing at all");

JPanel tabpanel=new JPanel();
tabpanel.setLayout(new BoxLayout(tabpanel, BoxLayout.Y_AXIS));
tabpanel.add(tabbedPane);

JPanel buttonPane=new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));

JButton okButton=new JButton("OK");
//okButton.setActionCommand("OK");
//okButton.addActionListener(this);
JButton cancelButton=new JButton("Cancel");
//cancelButton.setActionCommand("Cancel");
//cancelButton.addActionListener(this);
buttonPane.add(okButton);
buttonPane.add(cancelButton);
buttonPane.setAlignmentX(Component.CENTER_ALIGNMENT);

buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
buttonPane.add(Box.createHorizontalGlue());
buttonPane.add(okButton);
buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
buttonPane.add(cancelButton);

Container contentPane = getContentPane();
contentPane.add(tabpanel, BorderLayout.CENTER);
contentPane.add(buttonPane, BorderLayout.SOUTH);
//pack();
show(); // Remplace de setVisible(true) dans la méthode main
}

protected Component makeTextPanel(String text) {
JPanel panel = new JPanel(false);
JLabel filler = new JLabel(text);
filler.setHorizontalAlignment(JLabel.CENTER);
panel.setLayout(new GridLayout(1, 1));
panel.add(filler);
return panel;
}

public static void main(String[] args) {
/*JFrame frame = new JFrame(";jkjhlkj");
TabbedPaneDemo a = new TabbedPaneDemo();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});

// Ici tu met une fenêtre dans un conteneur, et c'est interdit voire illogique
frame.getContentPane().add(new TabbedPaneDemo(),
BorderLayout.CENTER);*/

//frame.setSize(400, 300);
//frame.setResizable(false);
//frame.setVisible(true);
new TabbedPaneDemo();
}
}


Core Breaker :)
Messages postés
3
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
26 mai 2003

Bonjour,
comment faire alors, si on a besoin de creer plusieurs fenetres dans une meme fenetre ? j'ai besoin pour un jeu, de creer une fenetre par joueur (maxi 4), et je ne ne sais pas comment faire.

Merci par avance.
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Tu ne peut pas avoir des instances d'une fenêtre dans une fenêtre. Aucun environnement au monde ne permet cela. Il faudrait sinon que ta fenêtre implémente un OS à l'interrieur. La société WMWare (http://www.vmware.com/) à implémenté cela mais ça reste très complexe et en plus je ne suis pas sûr que java puisse implémenter cela.

Core Breaker :)
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Sinon la solution est de faire des fenêtres distinctes mais je ne suis pas sûr que c'est ce que tu recherches

Core Breaker :)
Messages postés
3
Date d'inscription
mardi 20 mai 2003
Statut
Membre
Dernière intervention
26 mai 2003

Bonjour,
Merci pour tes réponses.
Est-il possible de créer des fenêtres en mettant les coordonnées où on veut qu'elles s'ouvrent (pare qu'elles s'ouvrent par défaut en haut à gauche)
A quoi sert la méthode SetBounds() ?

Merci.
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Oui on peu mais je ne sais as comment faire et SetBound permet d'effectuer un clipping

Core Breaker :)