Bonjour,
je developpe un interface graphique et je galère pour disposer les éléments.
j'ai eu l'idée de crée deux panel pour les afficher l'un en dessous de l'autre, est ce possible??
merci pour vos répones
Bonjour,
je developpe un interface graphique et je galère pour disposer les éléments.
j'ai eu l'idée de crée deux panel pour les afficher l'un en dessous de l'autre, est ce possible??
merci pour vos répones
Salut,
pour bien placer tes composants il faut utiliser les Layouts :
FlowLayout place les uns a la suite des autres
GridLayout cree un grille
....
Vois dans la doc Java, ils decrivent bien les Layout.
Avec un layout tu peux bien sur placer un panel en dessous de l'autre, par exemple en creant un gridLayout avec 1 en nb de colonnes et 2 en nb de lignes.
A+
Vincent
Merci,
ca fait plusieurs jours que je me bat avec des layout, et la javadoc et les cours de developpez.com et les tutoriels de sun.
Mais je commence vraiment avec les layout et je n'ai rien trouvé de détaillé,
peut être connaissez vous un cours bien détaillé.
je trouve ce cours interessant pour un debutant en swing :
http://jca.developpez.com/fichiers/java/swing.pdf
voila qui devrait t'aider à aprehender les principes de bases de swing...
et celui la tres bien fait je trouve (base pour tous les layouts puis specifications de chacun) :
http://java.sun.com/docs/books/tutor...out/using.html
Bonne lecture![]()
Salut,
Ceci utilise un GridBagLayout pour le panel principal ("pnlRecoFV") et des BoxLayout pour les sous-panels http://java.developpez.com/faq/java/...nner_composant
L'idée est d'afficher une boite de dialogue avec 4 panels:
-1- le premier comprend 2 labels: m_InstrumentRecoFVInstrumentPanel
-2- le 2e contient un label et une combobox, c'est un BoxLayout avec X_axis (il vient juste apres le 1er): pnlReco
-3- le 3e contient un label, une combo et un champ texte, c'est un BoxLayout avec X_axis (il vient juste apres le 2e): pnlFV
-4- le 4e contient 2 boutons, Add et Cancel et c'est un BoxLayout avec Y_axis, Add est au-dessus de Cancel, et ce panel est à droite par rapport aux autres: pnlButtonsRecoFV
Le résultat obtenu est satisfaisant, je vous laisse regarder:
Attention
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 //*************** Les attributs ***************** JPanel pnlRecoFV = new JPanel() ; JLabel recoFVInstrumentLbl = new JLabel() ; JLabel recommendationLbl = new JLabel() ; JComboBox RecommendationBox = new JComboBox() ; JLabel FairValueLbl = new JLabel() ; JComboBox FairValueBox = new JComboBox() ; JTextField FairValueText = new JTextField() ; /************** Le constructeur ***************** pnlRecoFV.setLayout(new GridBagLayout()); BoxLayout.X_AXIS)); m_InstrumentRecoFVInstrumentPanel = new InstrumentFVPanel(); pnlReco.setLayout(new BoxLayout(pnlReco, BoxLayout.X_AXIS)); pnlFV.setLayout(new BoxLayout(pnlFV, BoxLayout.X_AXIS)); pnlButtonsRecoFV.setLayout(new BoxLayout(pnlButtonsRecoFV, BoxLayout.Y_AXIS)); JPanel pnlReco = new JPanel() ; JPanel pnlFV = new JPanel() ; JButton addButton = new JButton("Add") ; JButton cancelButton = new JButton("Cancel") ; JPanel pnlButtonsRecoFV = new JPanel() ; recoFVInstrumentLbl.setText("Instrument: "); recommendationLbl.setHorizontalAlignment(SwingConstants.LEFT); recommendationLbl.setText("Recommendation :"); FairValueLbl.setText("Fair value: "); FairValueLbl.setHorizontalAlignment(SwingConstants.LEFT); RecommendationBox.setMaximumSize(new Dimension(150, 22)); RecommendationBox.setMinimumSize(new Dimension(150, 22)); RecommendationBox.setPreferredSize(new Dimension(150, 22)); pnlReco.setBorder( BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("Add a new recommendation"), BorderFactory.createEmptyBorder(10,10,10,10))); pnlReco.setLayout(flowLayout1); flowLayout1.setAlignment(FlowLayout.LEFT); pnlReco.add(recommendationLbl, null); pnlReco.add(RecommendationBox, null); FairValueBox.setMaximumSize(new Dimension(150, 22)); FairValueBox.setMinimumSize(new Dimension(150, 22)); FairValueBox.setPreferredSize(new Dimension(150, 22)); FairValueText.setMaximumSize(new Dimension(150, 22)); FairValueText.setMinimumSize(new Dimension(150, 22)); FairValueText.setPreferredSize(new Dimension(150, 22)); pnlFV.setBorder( BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder("Add a new fair value"), BorderFactory.createEmptyBorder(10,10,10,10))); FlowLayout flowLayout1 = new FlowLayout() ; pnlFV.setLayout(flowLayout1); flowLayout10.setAlignment(FlowLayout.LEFT); pnlFV.add(FairValueLbl, null); pnlFV.add(FairValueBox, null); pnlFV.add(FairValueText, null); pnlButtonsRecoFV.add(addButton); pnlButtonsRecoFV.add(cancelButton); pnlRecoFV.add(m_InstrumentRecoFVInstrumentPanel, new GridBagConstraints(0, 0, 3, 1, 1.0, 0.0 ,GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); pnlRecoFV.add(pnlReco, new GridBagConstraints(0, 1, 3, 1, 0.0, 0.0 ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnlRecoFV.add(pnlFV, new GridBagConstraints(0, 2, 3, 1, 0.0, 0.0 ,GridBagConstraints.SOUTH, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); pnlRecoFV.add(pnlButtonsRecoFV, new GridBagConstraints(5, 0, 1, 5, 0.0, 1.0 ,GridBagConstraints.NORTH, GridBagConstraints.VERTICAL, new Insets(5, 5, 5, 5), 0, 0)); tabCompany.addTab("Recommendation & Fair Value", pnlRecoFV) ; //************* La classe InstrumentFVPanel *********** public class InstrumentFVPanel extends JPanel{ JLabel lblInstrument = new JLabel(); JLabel MainInstrument = new JLabel(); FlowLayout flowLayout1 = new FlowLayout(); public InstrumentFVPanel() { try { jbInit(); } catch(Exception ex) { ex.printStackTrace(); } } void jbInit() throws Exception { lblInstrument.setHorizontalAlignment(SwingConstants.LEFT); lblInstrument.setText("Instrument:"); this.setLayout(flowLayout1); flowLayout1.setAlignment(FlowLayout.LEFT); this.add(lblInstrument, null); MainInstrument.setText("Main Instrument"); this.add(MainInstrument, null); } }
- La classe InstrumentFVPanel() a été ajoutée pour des besoins qui ne concerne pas le probleme des Layout. C'est une classe qui définit un panel contenant 2 label et qui sera instanciée par plusieurs autres classes pour obtenir le même panel (réutilisation).
Si vous avez des questions, n'hésitez pas.








Si t'en as marre des Layout (et je te comprends) il existe un nullLayout qui te permet de placer tes composants où tu le désires (avec des setBounds) ... de plus si tu utilises des AGL comme netBeans (gratuit) tu peux placer tes composants a la main
Voila voila. Cependant ca fait pas de mal de se familiariser avec les Layouts Bonne chance ^^
Il faut savoir que pour le positionnement des composants en java, 2 méthodes sont possibles:
- setBounds()
- LayoutManager
La 1ère est plus simple à utiliser mais + rigide et donc moins souple, pour l'utiliser, il faut désactiver le layoutmanager en faisant: setLayout(null).
La 2e possède des techniques très variées.
Je te propose de regarder la classe FormulaireBounds qui utilise la méthode setBounds():
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 import java.awt.*; import javax.swing.*; import java.awt.event.*; public class FormulaireBounds extends JFrame { private JPanel Panel = new JPanel(); private JPanel PanelBoutons = new JPanel(); private JPanel PanelFields = new JPanel(); private JButton Nom = new JButton("Nom"); private JButton Tel = new JButton("Téléphone"); private JButton Adresse = new JButton("Adresse"); private JTextField NomField = new JTextField(); private JTextField TelField = new JTextField(); private JTextField AdresseField = new JTextField(); //***************** Constructeur ***************** public FormulaireBounds () { super(); initialisation(); listeners(); } //***************** initialisation des composants ************** public void initialisation(){ //Définition des layout pour les panels Container container = this.getContentPane(); container.setLayout(null); // Les boutons Nom.setBounds(50,50, 140, 40); Tel.setBounds(50,110, 140, 40); Adresse.setBounds(50,170, 140, 40); container.add(Nom); container.add(Tel); container.add(Adresse); // Les champs NomField.setBounds(210 ,55, 200, 30); TelField.setBounds(210 ,115, 200, 30); AdresseField.setBounds(210 ,175, 200, 30); container.add(NomField); container.add(TelField); container.add(AdresseField); //Affichage de la fenêtre this.setTitle ("Formulaire"); this.setSize(500, 300); this.setVisible (true); this.show(); //setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); } //***************** Listeners ****************** public void listeners() { System.out.println ("Hello World"); Nom.addActionListener(new NomListener(NomField)); Tel.addActionListener(new TelListener(TelField)); Adresse.addActionListener(new AdresseListener(AdresseField)); } // ******************* main ******************* public static void main (String[] args) { FormulaireBounds formulaire = new FormulaireBounds (); } }//Fin de la 1e classe //******************* Listener du bouton Nom ******************** class NomListener implements ActionListener { JTextField textfield ; public NomListener(JTextField tf) { textfield = tf ; } public void actionPerformed(ActionEvent evt) { textfield.setText("Nom") ; } } //Fin de la 2e classe //******************* Listener du bouton Tel ******************** class TelListener implements ActionListener { JTextField textfield ; public TelListener(JTextField tf) { textfield = tf ; } public void actionPerformed(ActionEvent evt) { textfield.setText("Téléphone"); } } //fin de 3e classe //******************* Listener du bouton Adresse ***************** class AdresseListener implements ActionListener { JTextField textfield ; public AdresseListener(JTextField tf) { textfield = tf ; } public void actionPerformed(ActionEvent evt) { textfield.setText("Adresse"); } } //fin de 4e classe
et je te propose de lire ceci également qd t'auras le tps: Projet Matisse
Partager