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

  1. #1
    Membre du Club
    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
    Points : 46
    Points
    46
    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 du Club
    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
    Points : 46
    Points
    46
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    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 du Club
    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
    Points : 46
    Points
    46
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    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 du Club
    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
    Points : 46
    Points
    46
    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

  7. #7
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    1) Tout d'abord, pour l'exemple que j'ai cité dans l'autre post, il s'agit d'une classe, ImageBackground, qui s'utilise directement comme n'importe quel JPanel (en gros ça remplace ton ImagePanel), et qui a simplement en paramètre, une image, celle qu'on veut afficher dans le fond, un paramètre booléen pour dire si on veut afficher l'image en plein panel(false), ou en mosaique(true), et un second paramètre qui permet d'indiquer si on veut de la transparence simple ou complète (certains composants comme les combo ou les éditeurs ont un sous-composants interne qui, s'il est transparent, peut géner la lisibilité). L'exemple ayant été fait pour traiter des JComboBox il ne gère la transparence complète que pour les combo. Mais dans le cas général, la transparence simple fonctionne et, l'autre étant illisible la plupart du temps, la simple suffira dans ton cas.

    Ensuite, il suffit de suivre le code de la méthode main() et de voir que j'appelle une méthode createFrame() (4 fois juste pour la démo des combinaisons des paramètres booléens), et que cette méthode ne fait rien d'autre que du très standard (et que tu as déjà fait) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    JFrame frame = new JFrame(title.toString());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    JComponent background = new ImageBackground(image, mosaic, opaque);
     
    frame.getContentPane().add(background);
    createContent(background);  
     
    frame.setBounds(x, y, width, height);
    frame.setVisible(true);
    Tu prends ce code et tu le mets dans ta méthode de création de JFrame à toi. A la limite, tu remplaces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JComponent background = new ImageBackground(image, mosaic, opaque);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JPanel background = new ImageBackground(image, false, false);
    si tu es plus familière avec l'usage d'un JPänel.

    Et ensuite, il te suffit de créer la méthode createContent(JPanel panel) dans laquelle tu mettras exactement le même code que tu mettrais pour créer ton dialogue dans un JPanel.

    2) "ça marche pas" n'a aucun sens, ou plutôt ça en a tellement de possiblement complètement différent, que c'est comme si ça n'en avait aucun. Sois précise dans les descriptions de tes problèmes, des erreurs, de ce qui ne correspond pas à tes attentes, sinon on pourra difficilement te répondre, voir pas du tout.

    3) Déjà, on ne mélange pas des layouts et des setBounds : les appels à setBounds sont inutiles à partir du moment où un composant est géré par un Layout Manager.

    4) Ensuite, le BorderLayout est un gestionnaire qui gère 5 composants, dont l'emplacement correspond à une contrainte : nord, est, sud, ouest et centre. Par défaut, tout composant va au centre. Mais si on peut ajouter autant de composants à un panel avec la même contrainte, le BorderLayout n'en gère qu'un seul pour chaque contrainte.

    Quand tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    container.add(label,BorderLayout.NORTH); 
     
    container.add(bouton1);
    container.add(bouton2);
    container.add(bouton);
    container.add(texteAsc);
    Tu ajoutes un composant au nord, et 4 au centre, mais seul texteAsc est vraiment géré par le BorderLayout : mais ces 5 composants sont dans le JPanel. Comme tu as forcé les bounds de certains : en gros, ça fait quelque chose dont il ne m’intéresse pas de savoir ce que ça fait exactement parce que ce n'est pas la bonne manière de procéder.

    Si tu n'as pas d'espace entre les composants, c'est parce que le BorderLayout gère les espacements entre les composants via 2 paramètres (hgap et vgap) qui sont à 0 par défaut : comme tu ne leur donnes aucune valeur, il reste à 0.

    5) Ton code est un horrible fouillis où tout se mélange, les variables sont déclarées en vrac dans la classe pour n'être utilisées que dans le constructeur : écrire un code propre facilite sa compréhension et donc sa mise au point. Je dis ça surtout pour toi !

    Voici ton code remanié pour être plus lisible, et qui utilise ImageBackground (par contre, j'ai retiré les trucs non utilisé, comme sufTotPanel, que je ne savais pas où mettre, et je n'ai vu aucun menu dans ton code, donc je ne m'en suis pas occupé - d'ailleurs c'est une autre question qui n'a rien à voir avec ce qui nous occupe) :

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    public class Acceuil2 extends JFrame {
     
    	private static final long serialVersionUID = 1L;
     
    	// Il est préfèrable de créer ce genre de ressources comme ça (partagée, et modifiable à un seul endroit dans le code)
    	private final static Font POLICE_TITRE = new Font("Times new Roman", Font.CENTER_BASELINE, 30);
    	private final static Font POLICE_TEXTE = new Font("andalus", Font.ROMAN_BASELINE, 20);
    	private static final int HGAP = 5; // 5 pour espacement horizontal	
    	private static final int VGAP = 5; // 5 pour espacement vertical 
     
    	// on a besoin que de certaines variables ici (les composants qu'on veut pouvoir manipuler)
    	private JTextArea grandeZone;
     
     
    	public Acceuil2() {
     
    		// paramètrage fenêtre
    		this.setTitle("RTO");
    		this.setSize(900, 500);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setLocationRelativeTo(null);
     
    		// arrière plan
    		ImageBackground container = new ImageBackground(new ImageIcon("img.jpg").getImage(),false, false);
    		this.setContentPane(container);
     
    		// composants dans la fenêtre
    		createContent(container);
     
    	}
     
    	private void createContent(JPanel panel) {
     
    		// on utilise un BorderLayout pour gérer la position des composants
    		panel.setLayout(new BorderLayout(HGAP, VGAP)); 
     
    		// en haut
    		add(creerTitre(),BorderLayout.NORTH);
     
    		// à droite
    		add(creerBoutons(),BorderLayout.EAST);
     
    		// au centre
    		add(creerTexte(),BorderLayout.CENTER);
     
    	}
     
    	private JComponent creerTexte() {
     
    		// on créer la zone de texte
    		grandeZone = new JTextArea(10, 30);
     
    		// on la décore
    		grandeZone.setFont(POLICE_TEXTE);
     
    		// on la met dans un scrollpane
    		JScrollPane scrollPane = new JScrollPane(grandeZone);
     
    		return scrollPane;
     
    	}
     
    	private JComponent creerTitre() {
     
    		// on veut un label 
     
    		// on le créé
    		JLabel label = new JLabel("RTO:");
     
    		// on le décore 
    		label.setFont(POLICE_TITRE);
    		label.setForeground(Color.blue);
    		label.setHorizontalAlignment(JLabel.CENTER);
     
    		return label;
     
    	}
     
    	private JComponent creerBoutons() {
    		// on veut 4 boutons
     
    		// c'est plus simple de les gérer dans leur propre panel
    		JPanel panel = new JPanel(); 
     
    		panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // 1 colonne de boutons
    		panel.setLayout(new GridBagLayout());
     
    		GridBagConstraints gbc = new GridBagConstraints();
     
    		gbc.gridx = 0;
    		gbc.gridy = GridBagConstraints.RELATIVE;
    		gbc.fill = GridBagConstraints.HORIZONTAL;
    		gbc.insets = new Insets(HGAP,VGAP,0,0); // espacement
     
     
    		// on créé le premier bouton et on le place
    		JButton bouton1 = new JButton("Analyse");
    		panel.add(bouton1, gbc);
     
    		Dimension space = new Dimension(HGAP,VGAP);
    		panel.add(Box.createRigidArea(space)); // permet d'avoir un espacement
     
    		// pareil pour les autres
    		JButton bouton2 = new JButton("Ontologie");
    		panel.add(bouton2, gbc);
     
    		panel.add(Box.createRigidArea(space)); // permet d'avoir un espacement
     
            JButton bouton3 = new JButton("Interrogation");
            panel.add(bouton3, gbc);
     
            panel.add(Box.createRigidArea(space)); // permet d'avoir un espacement
     
            JButton bouton4 = new JButton("Quitter");
            panel.add(bouton4, gbc);
     
    		// on affecte les action aux boutons
    		bouton1.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent event) {
    				try {
    					Affichage.affichage();
    				} catch (ClassNotFoundException e) {
    					e.printStackTrace();
    				}
    			}
    		});
     
    		return panel;
     
    	}
     
    	public static void main(String[] args) throws IOException {
    		Acceuil2 ac = new Acceuil2();
    		ac.setVisible(true);
    	}
     
    }
    Et voilà comment ça appairait :

    Nom : Capture1.PNG
Affichages : 1513
Taille : 134,6 Ko

    Si tu préfères que ça s'affiche comme ça :

    Nom : Capture2.PNG
Affichages : 1545
Taille : 59,8 Ko

    Il faut faire une petite modif (en rouge) dans ImageBackground :

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    public class ImageBackground extends JPanel {
    
    	private Image image;
    	private Paint paint;
    	private final boolean componentOpaque;
    
    	public ImageBackground(Image image, boolean mosaic, boolean componentOpaque) {
    		if (image == null)
    			throw new IllegalArgumentException();
    		this.componentOpaque = componentOpaque;
    		if (mosaic) {
    			BufferedImage bufferedImage = toBufferedImage(image);
    			paint = new TexturePaint(bufferedImage, new Rectangle(0, 0,
    					bufferedImage.getWidth(), bufferedImage.getHeight()));
    		} else {
    			this.image = image;
    		}
    	}
    
    	private static BufferedImage toBufferedImage(Image image) {
    		if (image instanceof BufferedImage) {
    			return (BufferedImage) image;
    		}
    
    		BufferedImage bufferedImage = new BufferedImage(image.getWidth(null),
    				image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
    
    		Graphics2D bGr = bufferedImage.createGraphics();
    		bGr.drawImage(image, 0, 0, null);
    		bGr.dispose();
    
    		return bufferedImage;
    	}
    
    	@Override
    	protected void paintComponent(Graphics g) {
    		if ( paint!=null ) {
    			Graphics2D g2d = (Graphics2D) g;
    			g2d.setPaint(paint);
    			g.fillRect(0, 0, getWidth(), getHeight());
    		}
    		else if ( image!=null ) {
    			g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
    		}
    		super.paintComponent(g);
    	}
    
    	protected void addImpl(Component comp, Object constraints, int index) {
    		if (!componentOpaque) {
    			setComponentTransparent(comp);
    
    		}
    		super.addImpl(comp, constraints, index);
    	}
    
    	private void setComponentTransparent(Component comp) {
    		if (comp instanceof JComboBox<?>) {
    			// pour certain composant, pour gérer la transparence totale il faut
    			// faire du code spécifique
    			JComboBox<?> combo = (JComboBox<?>) comp;
    			if (combo.isEditable()) {
    				Component editor = combo.getEditor().getEditorComponent();
    				setComponentTransparent(editor);
    				editor.setBackground(null);
    			} else {
    				final ListCellRenderer renderer = combo.getRenderer();
    				ListCellRenderer newrenderer = new ListCellRenderer() {
    
    					@Override
    					public Component getListCellRendererComponent(JList list,
    							Object value, int index, boolean isSelected,
    							boolean cellHasFocus) {
    						Component comp = renderer.getListCellRendererComponent(
    								list, value, index, isSelected, cellHasFocus);
    						setComponentTransparent(comp);
    						return comp;
    					}
    
    				};
    				combo.setRenderer(newrenderer);
    			}
    		}
    		if (comp instanceof JComponent) {
    			JComponent component = (JComponent) comp;
    			if (!(comp instanceof JTextComponent)) {
    				component.setOpaque(false);
    				for (Component child : component.getComponents()) {
    					setComponentTransparent(child);
    				}
    			}
    		}
    	}
    	
    	private static JComponent createField(JComponent parent, String label) {
    		parent.add(new JLabel(label));
    		JComponent component = new JTextField();
    		parent.add(component);
    		return component;
    	}
    
    	private static JComponent createCombo(JComponent parent, String label,
    			boolean editable, String... values) {
    		parent.add(new JLabel(label));
    		JComboBox<String> component = new JComboBox<>(values);
    		component.setEditable(editable);
    		parent.add(component);
    		return component;
    	}
    
    }
    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.

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, 14h37
  2. Réponses: 17
    Dernier message: 17/02/2009, 22h37
  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, 00h54
  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, 09h57

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