Bordure exterieure: lineborder

empiret Messages postés 38 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 13 mars 2006 - 16 août 2005 à 14:12
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 - 20 août 2005 à 18:33
Bonjour,

Comment ajouter une bordure (d'epaisseur 3 par exemple), mais EXTERIEURE?


this.setBorder(new javax.swing.border.LineBorder(new
java.awt.Color(204,0,102), 3));

Suppons qu'on a un jpanel de dimensions 44/44. Je voudrais lui changer sa bordure quand je passe la souris dessus.

Le probleme est que si j'ai des composants a l'interieur et quand y a
la bordure, certains composants cachent la bordure. Donc on risque de
voir la bordure incomplete et c'est pas joli.

J'ai l'impression qu'on construit la bordure de telle facon on voit un jpanel 44/44 et non pas 44+3=47/47

Solutions:

- soit ya une methode d'ajouter une bordure exterieure facilement?

- soit je dois redimensionner mes composants pour laisser la place a la bordure ?



Merci.

empiret

6 réponses

sebus78 Messages postés 1 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 16 août 2005
16 août 2005 à 14:58
Tu peux essayer de redimmensionner tes composants:
setPreferredSize(new Dimension(x,y));

ou les donner une marge par rapport a (haut,gauche,bas,droite)
setInsets( 15,15,15,15) par Exemple.
Quand tu donnes un insets fais gaffe car si tu donnes un ecart a droite au premier composant de la ligne, t'as pas besoin d'en donner un à gauche pour le deuxieme composant.(ecart est deja donné).

Par contre pour utiliser setPreferredSize() et setInsets il faut un layout dde type GridBagLayout()
0
viking85 Messages postés 59 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 28 mars 2007 14
16 août 2005 à 15:10
et pour les bordure, tu peux essayer les BevelBorder. ex :
setBorder(new BevelBorder(1,Color.BLUE,Color.BLACK,Color.BLUE,Color.BLACK));

avec le 1 pour le type de bordure et les couleurs pour les bordures intérieurs et extérieurs.

en espérant qe cela t'aidera,
Chris.
0
empiret Messages postés 38 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 13 mars 2006
16 août 2005 à 16:06
Aucun type de bordure ne pourrait resoudre le probleme a mon avis, car tous les types de bordure utilisent le meme principe:

Si on a un jpanel de dimensions 44/44, rien ne deborde, toutes les bordures est dans le cadre 44/44 et rien ne sort du jpanel.

En fait, la bordure est comme la couche de peinture, moi je voudrais peindre de l'exterieur des mures, mais avec tous les types de bordure, meme BevelBorder cela consiste a peindre de l'interieur.

Je dois peut-etre choisir la deuxieme solution avec le changement des dimensions..pfff!

Cela m'oblige de changer les dimensions a chaque fois que la souris
rentre dans le jpanel, ou bien a accepter de voir un peu de blanc entre
le cadre de mon jpanel et ses composants.



empiret
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
18 août 2005 à 09:04
Nan, ne change pas tes dimensions a la volee, met ton JPanel plus grand
des le depart, et change juste la taille de ta Border a la volee.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
empiret Messages postés 38 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 13 mars 2006
19 août 2005 à 14:58
Bonjour,



finalement, y a pas de solution en utilisant les borders.

Tout est fixe et l'epaisseur de la bordure augmente quand la souris est dans mon jpanel.

J'ai diminue la taille (fixe) des composants pour voir la bordure en
entier quand la souris est dans le jpanel(epaisseur 2), quand la souris
est endehors, la bordure a une epaisseur 1, et ya de l'espace de 1
entre les composants et le cadre du jpanel.

Tant pis. Je ne vais pas m'amuser a changer les tailles des composants, c'est lourds et ca peut-etre long.



Merci.



empiret
0
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
20 août 2005 à 18:33
Tu ne peux pas dessiner la bordure toi même ? c'est pas trop compliqué à faire en redéfinissant la méthode paint(Graphics)



par exemple, pour une bordure autour un composant dans un jpanel :



public class Conteneur
extends JPanel
implements MouseListener {

boolean bordureOn = false;
JPanel monJPanel = new JPanel();

public Conteneur() {
monJPanel.setBackground(Color.orange);
monJPanel.setMaximumSize(new Dimension(200, 150));
monJPanel.setMinimumSize(new Dimension(200, 150));
monJPanel.setPreferredSize(new Dimension(200, 150));
monJPanel.addMouseListener(this);
this.add(monJPanel, null);

}

public void paint(Graphics g) {
super.paint(g);
if (bordureOn) {
Graphics2D g2d = (Graphics2D) g;
g2d.setStroke(new BasicStroke(3f));
g2d.drawRoundRect(monJPanel.getX() - 2, monJPanel.getY() - 2,
monJPanel.getWidth() + 3, monJPanel.getHeight() + 3, 2,
2);
}
}

public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}

public void mouseEntered(MouseEvent e) {
bordureOn = true;
repaint();
}

public void mouseExited(MouseEvent e) {
bordureOn = false;
repaint();
}

}


Dobel
[Une fois rien, c'est rien; deux fois rien, ce
n'est pas beaucoup, mais pour trois fois rien, on peut déjà s'acheter
quelque chose, et pour pas cher]
0
Rejoignez-nous