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

Agents de placement/Fenêtres Java Discussion :

Custom JComponent dans un GridLayout


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Par défaut Custom JComponent dans un GridLayout
    Bonjour!

    Mon application doit afficher un tableau d'objets, en vue de créer un "éditeur de niveau" pour un jeu à la Dungeon Master (isométrique, simple, etc.).

    L'idée est donc de représenter chaque block du terrain (mur, sol, porte) par un carré dans l'éditeur.

    Le code de la fenêtre de l'éditeur est:
    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 LevelEditorWindow extends javax.swing.JFrame {
     
    	/** Creates new form LevelEditorWindow */
    	public LevelEditorWindow() {
    		initComponents(); // Généré par Matisse
    		initWindow(); // Set le look and feel sur "system"
     
    		int size = 10; // Largeur du niveau, en blocks
    		int squareSize = 16; // Largeur d'un carré dans l'éditeur
     
    		levelPanel.setLayout(new GridLayout(0, size));
     
    		for (int i = 0; i < size * size; i++) {
    			levelPanel.add(new LevelBlockComponent());
    		}
     
    		this.setVisible(true);
    	} (...) // initComponents() et initWindow()
    Mon custom JComponent est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class LevelBlockComponent extends JComponent {
     
    	public LevelBlockComponent() {
    		super();
     
    		this.setMinimumSize(new Dimension(16, 16));
    		this.setMaximumSize(new Dimension(16, 16));
    		this.setSize(16, 16);
     
    		this.setBackground(Color.BLUE);
    		this.setBorder(BorderFactory.createLineBorder(Color.black));
    	}
    }
    en exécutant ceci je n'obtiens qu'un seul carré noir de quelques pixels de coté (sans fond bleu, etc. juste un simple carré noir) alors que si l'on remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    levelPanel.add(new LevelBlockComponent());
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    levelPanel.add(new JButton("test"));
    on voit apparaître une horde de boutons "test"...

    je ne trouve pas comment écrire mon custom JComponent... merci pour votre aide!

  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
    this.setOpaque(true) si tu veux qu'il dessine le fond.

  3. #3
    Membre habitué
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Par défaut
    ok, je viens de mettre setOpaque à true.

    + petite modification à la classe LevelBlockComponent:

    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 LevelBlockComponent extends JComponent {
     
    	public LevelBlockComponent() {
    		super();
     
    		this.setSize(32, 32);
    		this.setOpaque(true);
    	}
     
    	@Override
    	public void paint(Graphics g) {
    		g.setColor(Color.blue);
    		g.fillRect(0, 0, this.getSize().width, this.getSize().height);
    		g.setColor(Color.RED);
    		g.drawRect(0, 0, this.getSize().width -1, this.getSize().height -1);
    		super.paint(g);
    	}
    }
    celà ne change rien cependant...

    -> ajouter une instance de cet objet au jframe affiche bien un carré de 32x32
    -> ajouter les 100 instances via la loop donnent toujours un petit carré rouge, au lieu d'afficher une série de carrés bleu à bordure rouge

    question donc, faut-il définir une sorte de "volume" qu'occupe le composant?

  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
    Citation Envoyé par celeri-rave Voir le message

    question donc, faut-il définir une sorte de "volume" qu'occupe le composant?
    C'est le rôle de ton layoutManager de définir la taille de chaque composant ainsi que leur position. Dans certains cas, le LayoutManager utilise getPreferredSize(), getMinimumSize() et getMaximumSize() pour avoir une idée de ce qu'il doit faire, mais tous ne le font pas. Voir la doc du layoutManager que tu utilise pour plus de détails

  5. #5
    Membre habitué
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Par défaut
    Merci beaucoup c'est donc ça!
    Le GridLayout qui est utilisé ici semble faire appel à getPreferredSize(), voilà qui regle ma question!


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

Discussions similaires

  1. [JScrollPane]changer le JComponent dans mon JscrollPane
    Par biozaxx dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/02/2006, 12h34
  2. [SWT]organisation des données dans un gridlayout
    Par whilecoyote dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/12/2005, 17h24
  3. [VS2005][VB.Net] Custom Format dans un DataGridView
    Par Vonotar dans le forum VB.NET
    Réponses: 10
    Dernier message: 22/11/2005, 08h15
  4. Centrer un JTextField dans un GridLayout
    Par JoJoS dans le forum Agents de placement/Fenêtres
    Réponses: 15
    Dernier message: 24/08/2005, 19h14
  5. [swing] disposition des éléments dans un GridLayout
    Par al85 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 11/02/2005, 17h36

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