IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Coupure d'un extends JPanel


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut Coupure d'un extends JPanel
    Bien le bonjour ! je suis tout nouveau sur ce forum, donc ayez pitié de préférence

    Voilà mon problème, que j'essaye de comprendre depuis tout à l'heure :
    Je veux faire un JPanel contenant une grille modulable d'autres JPanels (par modulable j'entends que ce nombre est paramétré à l'instanciation de la classe). Tous mes JPanels sont contenus dans une classe WormsGUI extends JFrame, et ceux-ci sont des classes héritées de AbstractView qui est elle-même héritée de JPanel.

    Mon problème est que l'un des JPanels semble être... fixe : il ne s'adapte pas à son contenu, où que je le place dans le contentPane dans la JFrame.
    Sa taille ne bouge pas, malgré que j'essaye de lui en imposer une (setSize, setMinimumSize et PreferedSize).

    Pour comprendre ce que je veux dire avec tout ce charabia, voyez la capture d'écran que j'ai jointe (c'est le carré blanc). Ce foutu carré blanc refuse de bouger, quoi qu'il arrive. J'ai un essayé pas mal de trucs pendant près de 2/3 heures, donc là j'abandonne un peu d'essayer de trouver et je viens à vous en vous suppliant ^^

    Voici le code de la JFrame (l'essentiel) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.util.ArrayList;
    import javax.swing.*;
    import modele.World;
    public class WormsGUI extends JFrame {
     
    	private World world;
    	private JPanel contentPane = new JPanel(new BorderLayout());
     
    	public WormsGUI(World world) {
    		super("Worms");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setMinimumSize(new Dimension(200, 200));
    		setSize(300, 300);
    		this.world = world;
     
    		ParametersView v1 = new ParametersView(this);
    		GridView v2 = new GridView(this);
    		contentPane.add(v1, BorderLayout.EAST);
    		contentPane.add(v2, BorderLayout.WEST);
     
    		setContentPane(contentPane);
    		setVisible(true);
    	}
    }
    Celui de AbstractView :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    package vues;
     
    import javax.swing.JPanel;
     
    /**
     * SuperConstructor for every view
     */
    @SuppressWarnings("serial")
    public abstract class AbstractView extends JPanel {
     
    	protected WormsGUI main;
     
    	// BUILDERS ------------------------------------
    	public AbstractView(WormsGUI main) {
    		super();
    		this.main = main;
    	}
     
    	// MODIFIERS ------------------------------------
    	public abstract void update();
    	public abstract int getWidth();
    	public abstract int getHeight();
     
    	public WormsGUI getMain() {
    		return main;
    	}
     
    	public void setMain(WormsGUI main) {
    		this.main = main;
    	}
     
    }
    Celui de la vue qui marche (à droite) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class ParametersView extends AbstractView implements ActionListener {
     
    	private JButton go, goForever, stop;
     
    	public ParametersView(WormsGUI main) {
    		super(main);
    		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
     
    		go = new JButton("Lancer un cycle");
    		go.addActionListener(this);
    		add(go);
    		goForever = new JButton("Lancer la simulation");
    		add(goForever);
    		stop = new JButton("Arrêter");
    		add(stop);
     
    	}
    }
    Et celle qui me les b***** depuis quelques heures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class GridView extends AbstractView {
     
    	public GridView(WormsGUI main) {
    		super(main);
    		setLayout(new GridLayout(3, 3, 1, 1));
    		setBackground(Color.white);
     
    		for (int i = 0; i < 5; i++) {
    			JLabel p2 = new JLabel("Ca va ?");
    			add(p2);
    		}
    	}
    }
    Merci à vous d'avoir lu ! (et encore plus merci à celui qui arrivera à m'indiquer où est l'erreur).
    Images attachées Images attachées  

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    On pourrais voir l'entiereté de la classe GridView (avec toutes ses méthodes)? J'ai l'impression que tu srucharge, sans le savoir, des méthodes de JPanel et que, du coup, tu ne mémorise / traite plus correctement certaines choses. Il est par exemple abherant de voir que le screenshot n'affiche qu'une seule ligne au lieu des trois.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut
    Le problème n'est pas qu'il n'affiche qu'une seule ligne sur les trois, mais qu'il tronque carrément le JPanel (j'avais un composant plus grand avant, seule une partie était affichée). Voici la classe GridView, mais y'a pas grand chose en plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    package vues;
     
    import java.awt.Color;
    import java.awt.GridLayout;
     
    import javax.swing.JLabel;
     
    @SuppressWarnings("serial")
    public class GridView extends AbstractView {
     
    	public GridView(WormsGUI main) {
    		super(main);
    		setLayout(new GridLayout(3, 3, 1, 1));
    		setBackground(Color.white);
     
    		for (int i = 0; i < 5; i++) {
    			JLabel p2 = new JLabel("Ca va ?");
    			add(p2);
    		}
    	}
     
    	public int getWidth() {
    		return getMain().getWorld().getWidth()*10;
    	}
     
    	public int getHeight() {
    		return getMain().getWorld().getHeight()*10;
    	}
     
    	@Override
    	public void update() {
    		// TODO Auto-generated method stub
     
    	}
     
    }

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Une taille fixe, ce n'est pas compatible avec un BorderLayout. Si vous voulez imposer une taille minimale à votre composant, vous devez surcharger getMinimumSize(). De plus, Il faudra dans le composant parent (Frame) utiliser une layout qui respecte ce genre de chose, ce qui n'est pas le cas du BorderLayout.
    Bref, retirez ce getWidth/getHeight()

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut
    Ah, ben là était l'erreur, merci bien !

    Sinon le getHeight et getWidth étaient là pour paramétrer la JFrame, et je ne les utilisais pas (pour l'instant du moins), mais ils sont enlevés ^^

    Je retiendrais : borderlayout, mal.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Citation Envoyé par Licorne_enragee Voir le message

    Je retiendrais : borderlayout, mal.

    Mais alors pas du tout.
    Vouloir donner des tailles en pixel à des composant : mal.

    Le BorderLayout est le layout permettant de disposer tranquillement la base d'une interface graphique simple: toolbar (NORTH), status bar (SOUTH), trois colonnes (WEST,CENTER,EAST) dont celle au centre (CENTER) qui s'agrandit en fonction de l'espace disponible. alors que les autres n'e s’agrandissent que selon un seul axe.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/12/2011, 23h44
  2. [Swing]Affichage classe extends JPanel
    Par Quentin D dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 03/08/2007, 12h58
  3. pb avec une classe extends JPanel
    Par thecancre dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 11/05/2006, 18h45
  4. Problème lors du EXTEND d'un tableau
    Par banana31 dans le forum Oracle
    Réponses: 14
    Dernier message: 10/02/2004, 10h58
  5. JPanel et Border
    Par titoine dans le forum Débuter
    Réponses: 3
    Dernier message: 22/04/2003, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo