Pour la bar du haut, il y a une méthode JFrame.setMenuBar(taBar)
Ensuite, il faut que tu cherche du côté des layout. C'est ce qui gère le placement des composants. Il y a tout ce qui faut sur developpez.com
Version imprimable
Pour la bar du haut, il y a une méthode JFrame.setMenuBar(taBar)
Ensuite, il faut que tu cherche du côté des layout. C'est ce qui gère le placement des composants. Il y a tout ce qui faut sur developpez.com
Merci pour votre réponse,
mais quel(s) Layout dois-je utiliser ?
J'ai essayé avec un BorderLayout, le résultat ne correspond pas vraiment à celui recherché. :cry:
Un BorderLayout en base fera l'affaire.
On met la JTextArea dans le BorderLayout.CENTER.
Puis on crée un JPanel en BoxLayout horizontal (http://download.oracle.com/javase/tu...ayout/box.html) auquel on ajoute les deux JButton.
Puis on ajoute ce JPanel dans le BorderLayout.SOUTH du conteneur principal.
Merci votre réponse.
J'ai donc essayer d'ajouter un le code qui suit, pour ajouter un BoxLayout, mais aucun bouton n'apparait, et lors du redimensionnement de la fenêtre, le JLabel ne reste pas centré, est-ce normal ?:cry:
Code:
1
2
3
4
5
6
7
8
9
10
11
12 JLabel label = new JLabel ("Bonjour ! Bienvenue sur mon application"); panel.add ((label), BorderLayout.CENTER); Box bouton = Box.createHorizontalBox(); bouton.add(new JButton("OK")); bouton.add(Box.createGlue()); bouton.add(new JButton("Annuler")); Container c = getContentPane(); c.add(bouton,BorderLayout.SOUTH);
Et sinon, une dernière petite question, après je devrais réussir à terminé mon application.
J'aimerais ouvrir une une nouvelle fenêtre sur clic d'un bouton de la fenêtre principale, et fermé la fenêtre principal. Pour le moment j'arrive à ouvrir la nouvelle fenêtre grâce à ce bout de code :
Mais la fenêtre reste ouverte.Code:
1
2
3
4
5
6 if(source == bouton){ final JFrame frame = new JFrame("nouvelleFenêtre"); frame.setSize(300, 300); frame.setLocationRelativeTo(null); frame.setVisible(true);
Il y a t'il une solution ???
Peut-être :
Cordialement,Code:oldFrame.setVisible(false);
Patrick Kolodziejczyk.
D'accord merci.
Mais le oldFrame, il faut bien que je le remplace par le nom que j'ai donné à ma Fenêtre principale ?
Dsl de cette question idiote, mais comme je n'ai plus mes boutons, je ne peux pas faire les essais :oops:
En effet,
Si ton déclare une inner class pour le Listener dans la classe de ta Frame, alors tu dois faire MyFrameClassName.this pour accéder à celle-ci.
Sinon utilise des getter.
Cordialement,
Patrick Kolodziejczyk.
Merci, ça marche impeccable.
J'avais juste oublié le ".this"
Par contre, mes boutons ne s'affiche toujours pas en BoxLayout:?
Revoici mon bout de code:
Est-ce que quelqu'un voit ce qui cloche ?Code:
1
2
3
4
5
6
7
8
9
10
11
12 JLabel label = new JLabel ("Bonjour ! Bienvenue sur mon application"); panel.add ((label), BorderLayout.CENTER); Box bouton = Box.createHorizontalBox(); bouton.add(new JButton("OK")); bouton.add(Box.createGlue()); bouton.add(new JButton("Annuler")); Container c = getContentPane(); c.add(bouton,BorderLayout.SOUTH);
Merci d'avance pour vos réponses
Et bien voila, mon programme fonctionne enfin, ou presque.
je n'arrive toujours pas à approché l'aspect rechercher de mes fenêtres,
donc si quelqu'un a une idée ...
Et sinon, à mon grand désespoir, un nouveau problème,(toujours très bête, mais ennuyeux), vient d'apparaitre.
Lorsque je suis sur la deuxième fenêtre de mon application, et que je clique sur mon bouton Menu principale, et bien, rien ne se passe.
Et c'est censé fermé la fenêtre actuellement ouverte, et bien-sur ouvrir le menu principale.
Donc voici mon dernier bout de code qui cloche (hormis le disposition de mes composants :cry:):
J'ai retourné ce petit bout de code dans tous les sens, mais ça ne faisait que empirer.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 private JPanel buildContentPane(){ JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); bouton2 = new JButton ("Menu principale"); bouton.addActionListener(this); panel.add(bouton2); return panel; } public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if((JButton)e.getSource()==bouton2){ //JFrame FenetreBoutonsListener.setVisible(true); FenetreSaisieClaire.this.setVisible(false); } }
Le mieux est que tu rajoute un ActionListener sur le bouton que tu veux habituer avec la méthode addActionListener(Action Listener(){...
edit : je voulais dire "appuyer" pas "habituer".
Merci de la réponse,
mais je vient de changer de méthode, pour que mon code soit plus claire.
J'ai en effet créer une nouvelle classe, "Menu", que voici:
Mais même comme ça, à la compilation une erreur survient, que voici:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import java.awt.event.ActionEvent; import javax.swing.AbstractAction; public class Menu extends AbstractAction { private Fenetre fenetre; public Menu(Fenetre fenetre, String texte){ super(texte); this.fenetre = fenetre; } public void actionPerformed(ActionEvent e) { final JFrame FenetreBoutonsListener.setVisible(true);//On essai de rendre visible la fenetre principale Fenetre.this.setVisible(false); // on essai de fermer cette fenetre } }
Je ne comprend vraiment pas d’où vient cette erreur !!!:(Code:
1
2
3
4
5 Menu.java:16: ';' expected final JFrame FenetreBoutonsListener.setVisible(true);//On la rend visible ^ 1 error >Exit code:
Bonjour,
Vous commencez votre ligne comme si vous voulez déclarer un objet.Code:final JFrame FenetreBoutonsListener.setVisible(true);//On essai de rendre visible la fenetre principale
Mais je ne vois ni son identifieur, ni son affectation.
Vous utilisez une méthode qui s'applique à un objet dans un contexte statique. (Class.laMethode() => laMethode() doit être statique)
Je suppose que la ligne correcte serait :
Note :Code:
1
2
3
4 //Réalisation de l'instanciation final JFrame newFrame = new FenetreBoutonsListener(); //Affichage de la fenêtre newFrame .setVisible(true)
Cette ligne de code à peu de chance de fonctionné. Car votre code ne se trouve pas dans la classe Fenetre. Qui est "this" du coup ?Code:Fenetre.this.setVisible(false);
Ce qui est dommage c'est que vous disposez justement d'un lien vers celle-ci dans votre classe.
Autant l'utiliser :
Cordialement,Code:this.fenetre.setVisible(false);
Patrick Kolodziejczyk.
Waou, merci beaucoup, ça marche enfin.
J'avais effectivement oublié le "final JFrame newFrame = new FenetreBoutonsListener();",
et surtout le "this.fenetre.setVisible(false);"
Mon programme fonctionne enfin, il ne me reste plu-qu’à essayer d’organiser les composants.
Et une petite question pour la route, est-il possible de sélectionner un texte d'un JLabel ?
Non, ce n'est pas possible.
Mais il existe une astuce pour cela.
Cordialement,
Patrick Kolodziejczyk.
Très bien,
je vous suis très reconnaissant pour toutes vos réponses, et explications.
Je crois qu'il est enfin temps de cliquer sur le fameux bouton '"Résolu".
Encore merci, pour toutes vos explications :ccool:
Bonsoir,
dsl de ré-ouvrir ce sujet, mais je viens de me créer un nouveau problème.
Et oui, en voulant améliorer mon programme, j'ai voulu créer un bouton "Quitter", au menu principal, qui est ouvre un nouvelle fenêtre (JFrame), qui est censé se fermé automatiquement après un délai de 5 secondes.
Lorsque je clique sur le bouton "Quitter", la fenêtre s'ouvre, mais ne se coupe pas.
Voici mon code:
Une idée sur ce petit problème ?? :)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 import javax.swing.*; import java.awt.*; public class FenetreQuitter extends JFrame { private JLabel label; public FenetreQuitter(){ super(); build();//On initialise notre fenêtre } private void build(){ setTitle("Quitter"); //On donne un titre à l'application setSize(800,650); //On donne une taille à notre fenêtre setLocationRelativeTo(null); //On centre la fenêtre sur l'écran setResizable(true); //On permet le redimensionnement setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix setContentPane(buildContentPane()); } private JPanel buildContentPane(){ JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); JLabel label = new JLabel("J'espère que mon application vous a plu, Au revoir =D",JLabel.CENTER); panel.add(label,BorderLayout.CENTER); return panel; } public static void main(String[] args) { //On crée une nouvelle instance de notre FenetreTexte FenetreQuitter fenetre = new FenetreQuitter(); fenetre.setVisible(true);//On la rend visible try { Thread.sleep(5000); } catch (InterruptedException e) {} System.exit(0); } }
Pour fermer une fenêtre, il y a la méthode :
Code:maFenetre.dispose();
Merci de cette réponse,
mais cette méthode permet-elle d'attendre un délai de 5 seconde (par exemple), avant la fermeture ??
Il suffit de faire
Code:
1
2
3 Thread.sleep(5000); fenetre.dispose();
Pardonner mon incompétence,
mais en rajoutant le code suivant dans le main, j’obtiens encore une erreur
Code:
Voici l'erreur en question:Code:
1
2
3
4
5
6
7
8
9
10 public static void main(String[] args) { //On crée une nouvelle instance de notre FenetreTexte FenetreQuitter fenetre = new FenetreQuitter(); fenetre.setVisible(true);//On la rend visible Thread.sleep(5000); fenetre.dispose(); }
Faut-il importer quelque chose ??Code:
1
2
3
4 FenetreQuitter.java:39: unreported exception java.lang.InterruptedException; must be caught or declared to be thrown Thread.sleep(5000); ^ 1 error