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

Graphisme Java Discussion :

Contenu de l'application proportionnel à la taille de la fenetre


Sujet :

Graphisme Java

  1. #1
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut Contenu de l'application proportionnel à la taille de la fenetre
    Bonjour,

    j'ai developpé une application en java/swing.

    Je voudrais que le contenu de mon application s'adapte à la taille de la fenêtre de l'application.
    Je désire laisser à l'utilisateur le choix de maximiser/minimiser/resizer cette fenêtre.

    Tout mon affichage se fait dans un JFrame dans lequel je rend des panels visibles ou non, selon la navigation de l'utilisateur dans mon application.

    Je voudrais que le contenu de mon application soit proportionnel a la taille, de façon a toujours pouvoir tout voir.

    Est-ce qu'il faut utiliser un autre composant ??? par exemple JFrame / JWindows ???
    Ou alors est-ce qu'il faut que j'utilise des layout different (comme GridLayout, BorderLayout etc, etc ??

    Merci d'avance

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Il "suffit" d'utiliser les bons layout. Cependant, sans code et/ou description de l'interface, impossible de t'aider
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    ok, merci.
    je pensais que le code ne ferait que compliquer la question...

    voici le code de mon application un JFrame tout simple,
    un JPanel de navigation sur la gauche
    et un JPanel du reste de la fenetre, qui contient d'autres JPanel superposés, et je rend visible selon que l'utilisateur veut voir à temps t.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    public class MainFrame extends JFrame{
     
    	public PanneauImage panneauBouton1;
    	public PanneauImage panneauBouton2;
    	public PanneauImage panneauBouton3;
     
     
     
    	public PanelInformation panelInfo;
    	public PanelGraphe panelGraphe;
    	public PanelDetailReleve panelDetailReleve;
     
    	public MainFrame(){
     
     
    		initComponents();
    		this.setVisible(true);
     
    	}
     
    	/**
             * This method initializes this
             * 
             * @return void
             */
    	 private void initComponents() {
     
    		this.setTitle("Mon Titre");
     
     
     
    		Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    		int screenHeight = (int)tailleEcran.getHeight() -50;
    		int screenWidth = (int)tailleEcran.getWidth();
     
    		int widthNav = 160;
    		int cellWidth = 10;
    		//this.setSize(largeurEcran, hauteurEcran);
    		//this.setResizable(false);
     
    		GraphicsEnvironment env =
    		     GraphicsEnvironment.getLocalGraphicsEnvironment();
     
    		   this.setMaximizedBounds(env.getMaximumWindowBounds());
    		   this.setExtendedState(this.getExtendedState() | this.MAXIMIZED_BOTH);
     
     
    		this.setLocationRelativeTo(null);
    		this.setLayout(null);
     
     
    		// Panneau noir de gauche
    		JPanel panneauNavGauche = new JPanel();
    		panneauNavGauche.setLayout(null);
     
    		panneauBouton1 = new PanneauImage("bouton1.png", 10, 180, 150);
    		panneauNavGauche.add(panneauBouton1 );
    		panneauBouton2= new PanneauImage(Const.IMG_BTN_RELEVE, 10, 350, 150);
    		panneauNavGauche.add(panneauBouton2);
     
    		panneauBouton2 = new PanneauImage("btn2.png", 10, 520, 150);
    		panneauNavGauche.add(panneauBoutonAide);
     
    	 // Ajout des boutons de bas de page
    		boutonQuitter = new JButton("Quitter"); //, 648, 10);
    		boutonQuitter.setBounds(40,(screenHeight - 50), 100,40);   
     
    		//widthNav/2 - 40 ,screenHeight - 40, 80,20);   
    		panneauNavGauche.add(boutonQuitter);
     
    		panneauNavGauche.setBackground(Color.DARK_GRAY);
    		panneauNavGauche.setBounds(0, 0,widthNav, screenHeight + 50); //+50correspon a la barre des taches
    		this.add(panneauNavGauche);
     
    		// Ajout Panel Info
    		panelInfo = new PanelInformation();
    		//panelInfo.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), ""));
    		panelInfo.setBounds(widthNav+cellWidth, 0,screenWidth-2*cellWidth,screenHeight);
    		panelInfo.setVisible(true);
            this.add(panelInfo);
     
     
    		//Ajout Panel Releve
    		panelDetailReleve = new PanelDetailReleve();
            //panelDetailReleve.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), ""));
            panelDetailReleve.setBounds(widthNav+cellWidth, 0,screenWidth-2*cellWidth,screenHeight);
            this.add(panelDetailReleve);
            panelDetailReleve.setVisible(false);
     
     
     
     
     
    	 }

    et puis par exmple mes JPanels dans le contenu sont du style
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    public class PanelInformation extends JPanel{
     
    	/**
             * Visualisation des information
            
             */
    	private static final long serialVersionUID = 1L;
     
     
    	public PanelInformation(){
    		initComponents();
    		this.setVisible(true);
    	}
     
    	/**
             * This method initializes this
             * 
             * @return void
             */
    	 private void initComponents() {
     
     
    		 JPanel panelInfoPage1 = new JPanel();
    		 panelInfoPage1.setLayout(null);
    		 panelInfoPage1.setBounds(180,0, 565,525);    
    		 panelInfoPage1.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), ""));
     
    			JLabel labelBienvenue = new JLabel("Bienvenue ");
    			labelBienvenue.setFont(labelBienvenue.getFont().deriveFont(Font.BOLD,15));
    			labelBienvenue.setBounds(20, 50, 720, 50);
    			panelInfoPage1.add(labelBienvenue);
     
    	        JLabel labelExpli1 = new JLabel("Suivi ");
    	        labelExpli1.setFont(labelExpli1.getFont().deriveFont(Font.BOLD,18));
    	        labelExpli1.setBounds(150, 130, 720, 50); 
     
    	        JLabel labelExpli2 = new JLabel("Hémoglobine");
    	        labelExpli2.setFont(labelExpli2.getFont().deriveFont(Font.BOLD,15));
    	        labelExpli2.setBounds(150, 170, 720, 50); 
     
     
    	        panelInfoPage1.add(labelExpli1);
    	        panelInfoPage1.add(labelExpli2);
    	     ;
     
    	        panelInfoPage1.setVisible(true);
     
     
     
    		 JPanel panelNavigationBas = new JPanel();
     
    		 btnSuivant = new JButton("Suivant >");
             panelNavigationBas.add(btnSuivant);
     
             panelNavigationBas.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), ""));
             panelNavigationBas.setBounds(0,520, 700,30);
             //this.getRootPane().setDefaultButton(this.boutonEnregistrer);
             this.setLayout(new BorderLayout());
             this.add(panelInfoPage1,BorderLayout.CENTER);
             this.add(panelNavigationBas,BorderLayout.SOUTH);
     
     
    	 }

  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 : 45
    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
    Tous ces tu retire et tu utilise des layout. C'est le boulot des layouts de disposer et dimensionner les composant. Si tu jette les layouts par la fenêtre, t'étonne pas que la fenetre secomporte bizzarement. D'ou te viens cette idée saugrenue du setLayout(null) ?

  5. #5
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    Ok merci, j'ai donc jeté mon
    idée saugrenue du setLayout(null)


    mais du coup mon design marche plus

    Je veux un seul ecran avec
    - a gauche 2 boutons en vertical
    - et à droite le contenu de mon application 2 panels selon le bouton choisi a gauche

    j'ai donc ecrit un BorderLayout

    dans BorderLayout.WEST je mets un jpanel qui contient mes boutons, marche ok.
    dans le BorderLayout.CENTRE, je mets panelContenu1 ET panelContenu2
    puis ensuite je voulais jouer jPanelContenu1.setVisible(true) or false, selon le bouton actionné.

    Le probleme est que le BorderLayout.CENTRE n'accepte pas les supperposition et ne garde QUE le dernier..
    Donc dans le code ci-dessous, seule la fonction showPanel2 marche car le panelContenu2 est le dernier ajouté a mon layout

    Comment puis-je faire svp??

    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
     
    init(){
      panelContenu1.setVisible(true);
         this.add(panelContenu1, BorderLayout.CENTER);
      panelContenu2.setVisible(true);
         this.add(panelContenu2, BorderLayout.CENTER);
    }
     
    public void showPanel1() {
     
    		panelContenu2.setVisible(false);
                    panelContenu1.setVisible(true);
     
    }
    public void showPanel2() {
    		 panelContenu1.setVisible(false);
    		panelContenu2.setVisible(true);
     
     
    }
    merci d'avance

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Pour switcher facilement entre plusieurs composants, tu places un CardLayout dans le BorderLayout.CENTRE.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    ok..
    j'ai trouvé une solution en rajoutant en derniere ligne de mes showMethod
    this.add(panelconcerné, BorderLayout.CENTER);

    mais c'est moyen j'imagine ?

  8. #8
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par hbar31 Voir le message
    ok..
    j'ai trouvé une solution en rajoutant en derniere ligne de mes showMethod
    this.add(panelconcerné, BorderLayout.CENTER);

    mais c'est moyen j'imagine ?
    Nos messages se sont croisés
    Utilise le CardLayout. Dans le listener de chacun des boutons, tu actionnes le bon composant via le CardLayout. Va voir la javadoc pour plus de précisions
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  9. #9
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    merci du conseil !!

    je ne connaissais pas l'usage de CardLayout, je vais regarder merci !

  10. #10
    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 : 45
    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
    le cardlayout, c'est le même layout qui est utilisé pour les boites à onglets Donc ca correspond exactement à ce que tu veux faire.

  11. #11
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    oui c'est parfait merci !!

    bon le resizing fait des trucs pas toujours très joli...
    (cf img attaché) mais bon, as good as it gets...

    merci de votre aide.
    Images attachées Images attachées  

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2008, 12h42
  2. Réponses: 3
    Dernier message: 30/01/2007, 18h23
  3. Réponses: 3
    Dernier message: 19/12/2006, 19h38
  4. Réponses: 9
    Dernier message: 27/07/2006, 14h38
  5. Réponses: 5
    Dernier message: 23/10/2005, 11h47

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