[Swing] Problème redimensionnement d'un composant dans la surcharge de paintComp [Résolu]

coinki 57 Messages postés mercredi 26 février 2003Date d'inscription 6 juillet 2009 Dernière intervention - 17 nov. 2006 à 15:32 - Dernière réponse : coinki 57 Messages postés mercredi 26 février 2003Date d'inscription 6 juillet 2009 Dernière intervention
- 17 nov. 2006 à 17:06
Bonjour,

Je réalise une application avec une frame et un panel. Dans les panels, j'ai des composants de plusieurs types (JTextField, JTextArea, JCombobox ...)
J'ai un composant qui doit se redimensionner en fonction de la dimension des autres.
Pour faire cela, j'ai surchargé la fonction paintComponent et ajouter mon redimensionnement.
Malheuresement, le redimensionnement ne se réalise pas et se fait par exemple quand on redimensionne la fenêtre.

J'ai créé un code qui résume le problème simplement:
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestPaintComponent extends JPanel {
    
    private JButton but1;
    private JButton but2;
    
    public TestPaintComponent(){
        super();
        
        but1 = new JButton("Bouton 1");
        but2 = new JButton("Bouton 2"); 
        add(but1);
        add(but2);
        
    }
    
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        
        //but1.setSize(new Dimension(200,200));
        but1.setPreferredSize(new Dimension(200,200));
    }
    
    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setSize(800,600);
        frame.setContentPane(new TestPaintComponent());
        frame.setVisible(true);
    }
}


si on utilise la ligne
but1.setPreferredSize(new Dimension(200,200));
, le composant se redimensionne après le redimensionnement de la fenêtre.
si on utilise la ligne
but1.setSize(new Dimension(200,200));
, le composant se redimensionne mais chevauche le bouton 2.

Quelqu'un a-t il une solution

Merci

Alain
Afficher la suite 

4 réponses

Répondre au sujet
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 17 nov. 2006 à 17:04
+3
Utile
Salut,

en fait pour faire ce que tu veux il te faut faire un truc du genre :

public class TestPaintComponent extends JPanel{

    private JButton but1;
    private JButton but2;
   
    public TestPaintComponent(){
        this.setLayout(new BorderLayout());
       
        but1 = new JButton("Bouton 1");
        but2 = new JButton("Bouton 2");
        but1.setPreferredSize(new Dimension(0,but2. getPreferredSize ().height*2));//n'utilise pas getSize mais getPreferredSize
       
        add(but1,BorderLayout.NORTH);
        add(but2,BorderLayout.SOUTH);
       
       
    }
   
    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setSize(800,600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(new TestPaintComponent());
        frame.setVisible(true);
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Twinuts
Twinuts 5261 Messages postés dimanche 4 mai 2003Date d'inscription 20 avril 2018 Dernière intervention - 17 nov. 2006 à 16:31
0
Utile
Salut,

heuu question con mais pourquoi tu n'utilise pas un Layout et si il te plais pas pourquoi ne pas en creer un...

si tu n'es pas a laise avec les layout :
http://java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr/shortcourse.html

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Commenter la réponse de Twinuts
coinki 57 Messages postés mercredi 26 février 2003Date d'inscription 6 juillet 2009 Dernière intervention - 17 nov. 2006 à 16:40
0
Utile
Merci pour ta réponse.
En fait, même avec un layout ça marche pas:

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestPaintComponent extends JPanel {
   
    private JButton but1;
    private JButton but2;
   
    public TestPaintComponent(){
        super();
       
        this.setLayout(new BorderLayout());
       
        but1 = new JButton("Bouton 1");
        but2 = new JButton("Bouton 2");
       
        add(but1,BorderLayout.NORTH);
        add(but2,BorderLayout.SOUTH);
       
    }
   
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
       
        but1.setPreferredSize(new Dimension(0,but2.getSize().height*2));
    }
   
    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setSize(800,600);
        frame.setContentPane(new TestPaintComponent());
        frame.setVisible(true);
    }
}

Ici, la hauteur du bouton 1 est égale à 2 fois celle du bouton 2 seulement après avoir redimensionner la frame
Commenter la réponse de coinki
coinki 57 Messages postés mercredi 26 février 2003Date d'inscription 6 juillet 2009 Dernière intervention - 17 nov. 2006 à 17:06
0
Utile
Parfait, merci
Commenter la réponse de coinki

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.