Bonjour,
J'ai crée un JPanel et j'ai mis quelque éléments dedans centré verticalement. Cependant, j'aimerais qu'il y ait des espaces entre chaque éléments, mais je ne sais pas quel propriété utilisé pour le faire...
merci
a+
Version imprimable
Bonjour,
J'ai crée un JPanel et j'ai mis quelque éléments dedans centré verticalement. Cependant, j'aimerais qu'il y ait des espaces entre chaque éléments, mais je ne sais pas quel propriété utilisé pour le faire...
merci
a+
les Jpanel ne gerent pas la position des éléments, c'est les Layout qui font ca
Tu peux utiliser un XYLayout();
Je te donne le code d'un XYLayout() que j'ai amélioré puisque tu ne pouvais positionner que 100 composants :
Code:
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 import java.awt.*; import javax.swing.*; import java.util.*; class XYLayout implements LayoutManager { Dimension size; private JComponent[] components; private int[] componentX; private int[] componentY; private int[] componentH; private int[] componentW; private int numComponents = 0; public XYLayout(int width, int height) { size = new Dimension(width, height); components = new JComponent[0]; componentX = new int[0]; componentY = new int[0]; componentW = new int[0]; componentH = new int[0]; } public int getIDComponent(JComponent comp){ int retour = -1; for(int i=0;i<components.length;i++){ if(comp==components[i]) { retour=i; i=components.length; } } return retour; } public int[] getDefinition(int id){ int retour[] = new int[4]; retour[0]=componentX[id]; retour[1]=componentY[id]; retour[2]=componentW[id]; retour[3]=componentH[id]; return retour; } public void setDefinition(int id,int[] param){ componentX[id]=param[0]; componentY[id]=param[1]; componentW[id]=param[2]; componentH[id]=param[3]; } public void setSize(Dimension s) { size = s; } public Dimension getSize() { return size; } public void addLayoutComponent(String n, Component c) { try{ int longueur = components.length+1; int[] componentXTemp = new int[longueur], componentYTemp = new int[longueur], componentWTemp = new int[longueur], componentHTemp = new int[longueur]; JComponent[] componentsTemp = new JComponent[longueur]; for(int i=0;i<longueur-1;i++){ componentsTemp[i]=components[i]; componentXTemp[i]=componentX[i]; componentYTemp[i]=componentY[i]; componentWTemp[i]=componentW[i]; componentHTemp[i]=componentH[i]; } componentsTemp[numComponents]= (JComponent)c; StringTokenizer st = new StringTokenizer(n,","); componentXTemp[numComponents] = Integer.parseInt(st.nextToken()); componentYTemp[numComponents] = Integer.parseInt(st.nextToken()); componentWTemp[numComponents] = Integer.parseInt(st.nextToken()); componentHTemp[numComponents] = Integer.parseInt(st.nextToken()); numComponents++; components=componentsTemp; componentX=componentXTemp; componentY=componentYTemp; componentW=componentWTemp; componentH=componentHTemp; } catch (Exception e) { e.printStackTrace(); } } public void removeLayoutComponent(Component c){ } public Dimension preferredLayoutSize(Container parent) { return size; } public Dimension minimumLayoutSize(Container parent) { return size; } public void layoutContainer(Container parent) { if(parent.countComponents()==0)return; for(int i=0;i<numComponents;i++) { components[i].reshape(componentX[i],componentY[i],componentW[i],componentH[i]); components[i].validate(); } } }
Pour l'utiliser, tu fait
Voila ;-)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 JFrame fen = new JFrame(); Container co = fen.getContentPane(); int largeur = 500, //largeur de ton composant hauteur = 300; //hauteur de ton composant co.setLayout(new XYLayout(largeur,hauteur)); fen.setBounds(0,0,largeur,hauteur); co.add("10,20,100,25",new JButton("Mon bouton")); // Tu dois entrer en paramètre la position de tes composants. // Ici, ce sera : // x = 10 // y =20 // largeur = 100 // hauteur = 25
En général les layout manager peuvent prendre en paramètre dans leur constructeur l'espace ( horizontal et vertical ) entre les différents composants qu'il contient ( appelé hgap et vgap dans la javadoc ).
Ainsi, si tu veux mettre un grand espacement ( 100 pixels par exemple ) tu peux construire tes layouts de cette façon :
Code:
1
2
3
4
5 BorderLayout bl=new BorderLayout(100,100); FlowLayout fl=new FlowLayout(FlowLayout.CENTER,100,100); GridLayout gl=new GridLayout(nLignes,nColonnes,100,100); etc...
Et accessoirement certains layout permettent de fixer des marges aux composants, en particulier le GridBagLayout