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

AWT/Swing Java Discussion :

Définir un arrière plan unique pour un interface en Swing


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut Définir un arrière plan unique pour un interface en Swing
    Bonjour,

    je cherche à définir un arrière-plan dans un Jframe. Donc je trouve qu'il faut definit un container (JPanel) et puis on fait l'insertion de l'image. c'est bon ça marche. Mais pour mon cas j'ai un JtextArea ou Jlabel au centre de JPanel et des boutons à droite et un menu en haut. Donc comme solution c'est de diviser le container par BorderLayout. Mais je trouve que BorderLayoutsouth et west sont occupé par le JTextArea qui devient très grand. Donc comme idée je fais deux autres JPanel et je les mets en BorderLayoutsouth et BorderLayoutwest. Donc l'image dans le Jpanel est appelée pour chaque fois que je définis un JPanel. Et donc comme résultat une image est affichée dans chaque Jpanel.

    Je pense que pour résoudre ça de travailler avec setBounds pour positionner mes composants dans le même container. Mais ça ne marche pas avec moi. Les composants prend une place bien déterminé et ne change pas ces positions même je change les paramètres de setBounds.

    Pouvez-vous m'aider à résoudre ça?




    Merci beaucoup

  2. #2
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut
    Bonjour
    Je pense que le question n'est pas clair. je pose mon problème d'une autre façon. Je cherche a créer plusieurs composants dans le même JPanel. je trouve que la solution est d'utiliser la fonction setBounds. mais ça marche pas avec moi. j'ai mal exploité mes composants. le code est bien définit précédemment. on peux créer plusieurs panel mais lorsque je fais l'appel d'une image comme arrière plan l'image est appelée plusieurs fois. j'attends s'il vous plait votre aide
    Merci beaucoup

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    La méthode setBounds sert à imposer position et taille à un composant dans un conteneur : rien à voir avec le fait d'avoir une image en arrière plan. D'ailleurs, il est préférable d'utiliser un LayoutManager pour gérer automatiquement la position et la taille, pour qu'elle s'adapte aux dimensions de la fenêtre, dimensions qui peuvent varier en fonction des utilisateurs et de la taille de leur écran.

    D'autre part, pour mettre une image en fond d'un formulaire (JPanel avec plusieurs composants dedans), le sujet a déjà été traité ici.

    Au sujet de ton code en particulier, difficile de dire quoique ce soit, vu que tu ne fournis pas le code de ImagePanel.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut
    Bonjour,
    L'utilisation d'un setBounds pour positionner les composants dans un Jpanel je pense qui est une solution pour créer plusieurs composants dans un seul Panel, et de les positionnés a des emplacements définit par l'utilisateur. Donc comme résultat un seul Panel qui contient plusieurs composants et donc lorsque je mets une image en arrière-plan, j'obtien par conséquence un arriére plan unique. mais si j'utilise les LayoutManagers alors je suis obligés de définir plusieurs panels pour occuper l'emplacement de border.south et border.west, East) car sans utilisant plusieurs panel alors si je mets le textArea dans le border?center il occupe tous les autres borders (south et west ). Donc je suis obligé de faire appel de l'image pour chaque panel. et donc j'obtien un arriére plan composé par une seule image qui se répète dans chaque panel.
    Voici le code d’ImagePAnel.
    j’espère que l'idée est clair.
    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
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Image;
     
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
     
    public class ImagePanel extends JPanel {
     
    	JTextArea grandeZone = new JTextArea(3, 3);
        private static final long serialVersionUID = 1L;
     
        public static void main(String[] args) {
            new Acceuil2();
     
        }
     
        private Image img;
     
        public ImagePanel(Image img){
            this.img = img;
            JScrollPane texteAsc;
        	Font fonte  ;
        	int tailleInitiale = 20;
        	fonte = new Font("andalus", Font.ROMAN_BASELINE, tailleInitiale);
        	grandeZone.setFont(fonte);
     
            texteAsc = new JScrollPane(grandeZone);
        }
     
        public void paintComponent(Graphics g) {
            g.drawImage(img, 0, 0, null);
        }
    }

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Il n'y a strictement aucune différence dans la composition de composants entre l'utilisation d'un LayoutManager, ou l'utilisation de setBounds : la seule différence c'est que le LayoutManager gère (en quelque sorte) automatiquement les appels à setBounds(), selon des règles. Cela n'a aucune influence sur un éventuel découpage en sous panels.

    D'autre part, il est évident qu'en mettant l'image dans plusieurs panels qui la dessine tous, elle apparaisse plusieurs fois. Bien qu'on pourrait avec un peu de code, s'arranger pour que chaque sous panel affiche la portion de l'image qui correspond à sa position et sa taille, la solution la plus simple est celle que j'ai mise dans la discussion dont j'ai mis le lien dans ma précédente réponse.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut
    Bonjour,
    malheureusement je pas réussis a exploité le code que vous me conseillé a utiliser. je trouve qui est très difficile parce que je suis débutante et je ne connais pas beaucoup concernant swing. Mon interface est trés simple 4 boutons a droite avec une zone de texte au centre et un label au north avec un menu au north aussi.
    et au fond une image comme arriére plan.
    j'utilise le BorderLayout mais ça marche pas. j'utilise aussi setBounds mais ça marche pas. je vous montré le code et j’espère que vous m'aider a corrigé. le TextArea occupe tous l'espace. il n'existe pas un espace entre les boutons le textearea et le label. l'image ne s'affiche pas. j'ai aucune idée comment faire ça. j'espére que vous m'aider avec une solution simple et compréhensible. voici le code:
    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
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Font;
    import java.io.IOException;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    public class Acceuil2 extends JFrame {
        private static final long serialVersionUID = 1L;
    ImagePanel container =new ImagePanel(new ImageIcon("img.jpg").getImage());
    private JPanel pan1 = new JPanel();
    private JPanel pan2 = new JPanel ();
    JButton bouton1 = new JButton("menu Utilisateur");
    JButton bouton2 = new JButton("menu administrateur");
    JButton bouton = new JButton("visite virtuel");
    JButton bouton3 = new JButton("Quitter");
    String line;
    private JLabel label = new JLabel("siteweb");
    JPanel surfTotPanel = new JPanel();
    JTextArea grandeZone = new JTextArea(3, 2);
        public Acceuil2(){
        	container.setLayout(new BorderLayout());
        	JScrollPane texteAsc;
        	Font fonte;
        	int tailleInitiale = 20;
        	 texteAsc = new JScrollPane(grandeZone);
        	bouton1.setBounds(700, 70,170, 50);
        	bouton2.setBounds(700, 170, 170, 50);
        	bouton.setBounds(700, 270, 170, 50);
        	grandeZone.setBounds(0, 0, 0, 0);
        	texteAsc.setBounds(0,0, 0, 0);
     
        this.setTitle("Ma fenetre ");
        this.setSize(900, 500);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        fonte = new Font("andalus", Font.ROMAN_BASELINE, tailleInitiale);
        grandeZone.setFont(fonte);
     container.add(label,BorderLayout.NORTH);
     
        container.add(bouton1);
        container.add(bouton2);
        container.add(bouton);
        container.add(texteAsc);
        Font police = new Font("Times new Roman", Font.CENTER_BASELINE, 30);
        label.setFont(police);
        label.setForeground(Color.blue);
        label.setHorizontalAlignment(JLabel.CENTER);
        this.setContentPane(container);
        this.setVisible(true);
        }
        public static void main(String[] args) throws IOException{
        	Acceuil2 ac= new Acceuil2 ();
        	ac.setVisible(true);
        }
     
        }
    le code de ImagePanel 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
    19
    20
    21
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Image;
     
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    public class ImagePanel extends JPanel {
        private static final long serialVersionUID = 1L;
        private Image img;
     
        public ImagePanel(Image img){
            this.img = img;
     
        }
     
        public void paintComponent(Graphics g) {
            g.drawImage(img, 0, 0, null);
        }
    }
    Merci beaucoup

Discussions similaires

  1. Impression en arrière plan pour DOS
    Par Inpri-V dans le forum C#
    Réponses: 4
    Dernier message: 25/05/2009, 15h37
  2. Réponses: 17
    Dernier message: 17/02/2009, 23h37
  3. mon arrière plan trop grand pour le bloc
    Par 123quatre dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 07/10/2006, 01h54
  4. image d'arrière plan unique sur tableau
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 06/07/2006, 10h57

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