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 :

Bords arrondis d'un JPanel


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Bords arrondis d'un JPanel
    Salut,

    Je suis en train de créer un programme constitué de deux classes : une classe TNote, et une classe TMain. Ce programme m'affiche une fenêtre où j'ai mis une image de fond avec des bords arrondis transparents intégrés dans mon image de fond. Seul problème : Il semblerait que mon JPanel aie déjà un fond coloré (gris très très clair), puisque ma fenêtre reste carrée quoi qu'il arrive. Cela fait des heures que je cherche une solution à mon problème, en vain.

    Est ce que quelqu'un aurait une idée qui pourrait m'aider ?
    Merci d'avance

    P.S. : Voici mes deux classes de code, si ça peut aider :

    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
     
    public class TNote extends JPanel {
     
    	public TNote() {	
    		this.setLayout(null);
    		this.setOpaque(false);
     
    		JLabel background = new JLabel(new ImageIcon("background2.png"));
    		background.setBounds(0, 0, 252, 252);
    		this.add(background);
     
    		JButton add = new JButton();
    		add.setBounds(20, 10, 28, 28);
    		background.add(add);
    		add.setIcon(new ImageIcon("addB.png"));
    		add.setBorderPainted(false);
    		add.setContentAreaFilled(false);
     
    		JButton newColors = new JButton();
    		newColors.setBounds(156, 10, 28, 28);
    		background.add(newColors);
    		newColors.setIcon(new ImageIcon("newColors.png"));
    		newColors.setBorderPainted(false);
    		newColors.setContentAreaFilled(false);
     
    		JButton delete = new JButton();
    		delete.setBounds(204, 10, 28, 28);
    		background.add(delete);
    		delete.setIcon(new ImageIcon("delete.png"));
    		delete.setBorderPainted(false);
    		delete.setContentAreaFilled(false);
     
     
    		////
    		//this.setBackground(new Color(0,0,0,65));
    		////
     
    		JTextArea text = new JTextArea("A vos claviers...");
    		text.getFont().deriveFont(Font.ITALIC);
    		text.setForeground(Color.gray);
    		text.addMouseListener(new MouseListener() {           
    			@Override
    			public void mouseReleased(MouseEvent e) {}         
    			@Override
    			public void mousePressed(MouseEvent e) {}          
    			@Override
    			public void mouseExited(MouseEvent e) {}           
    			@Override
    			public void mouseEntered(MouseEvent e) {}          
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				JTextArea texteArea = ((JTextArea)e.getSource());
    				texteArea.setText("");
    				//texteArea.getFont().deriveFont(Font.PLAIN);
    				//texteArea.setForeground(Color.black);
    				texteArea.removeMouseListener(this);
    			}
    		});
     
    		/////////// ??????
    		text.setOpaque(false);
    		///////////
     
    		this.add(text);
    		text.setBounds(0, 50, 250, 200);
    	}
    }

    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class TMain extends JFrame {
     
        public TMain(){
    		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
    		getContentPane().add(new TNote(), BorderLayout.CENTER);
    		this.setLocationRelativeTo(null);
    		this.setSize(new Dimension(252, 252));
     
    		this.setUndecorated(true);
     
        }
     
        public static void main (String[] args){
    		java.awt.EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				new TMain().setVisible(true);
    			}
    		});
     
        }
    }

  2. #2
    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,

    Ton soucis, ce n'est pas le panel. Tu l'as rendu transparent (setOpaque(false)), son fond n'est donc pas peint. Le souci, c'est la fenêtre qui est, elle, rectangulaire (et il y a plein de couches en dessous du content pane qui ne sont pas transparente). Le plus simple c'est de donner une forme à ta fenêtre, vu qu'elle est "undecorated", avec la classe java.awt.geom.RoundRectangle2D :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public TMain(){
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
        getContentPane().add(new TNote(), BorderLayout.CENTER);
        this.setLocationRelativeTo(null);
        this.setSize(new Dimension(252, 252));
     
        this.setUndecorated(true);
        this.setShape(new RoundRectangle2D.Double(0d, 0d, 252d, 252d, 25d, 25d));
     
    }
    J'ai mis 25 de rayon d'arrondi dans mon exemple : il faut que tu adaptes cette valeur à la valeur du rayon de l'arrondi de ton image de fond.
    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.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup d'avoir pris le temps de me répondre !
    Je viens d'essayer ton code, et j'ai beau le laisser tel quel, le modifier, le mettre dans la classe Main, ou dans Note, rien à faire, rien ne change :/

  4. #4
    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
    Le code que je t'ai montré, c'est le code du constructeur de ta classe TMain, avec juste une ligne ajoutée à la fin, en plus de l'import nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setShape(new RoundRectangle2D.Double(0d, 0d, 252d, 252d, 25d, 25d));
    Il n'y a donc pas 36 endroits où le mettre.

    Tu exécutes ton programme sous quel OS ? Tu peux juste ajouter temporairement le code suivant au début de ta méthode main et me dire ce que ça affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        	GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    		GraphicsDevice[] gs = ge.getScreenDevices();
     		for (int j = 0; j < gs.length; j++) {
     			      System.out.println( gs[j] + ": " + 
     	gs[j].isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT));
     		}
    Tu n'as pas fait d'autres modification à ton code depuis que tu l'as montré (genre par exemple passer ta fenêtre en plein écran, auquel cas ça ne fonctionnerait pas effectivement) ?
    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.

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Ah c'est bon j'ai trouvé ce qui n'allait pas dans mon code et ta première suggestion fonctionne parfaitement !
    Merci beaucoup

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/03/2013, 11h36
  2. [JPanel] bords arrondis et setBackgroung
    Par size_one_1 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 18/06/2011, 23h17
  3. [Débutant] Bouton avec les bords arrondis
    Par zwieback dans le forum Graphisme
    Réponses: 3
    Dernier message: 12/06/2006, 13h18
  4. [C#][2.0]UserCtl Degradé backcolor + Bord arrondi
    Par chnew dans le forum Windows Forms
    Réponses: 11
    Dernier message: 26/01/2006, 19h20
  5. [CSS] - une div aux bords arrondis ?
    Par 10-nice dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 23/09/2005, 15h47

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