Bonsoir
Tout d'abord merci pour votre lecture.
Je suis toujours en train d'apprendre à créer une interface swing et je bloque sur un point crucial
Mes lectures sont :
http://baptiste-wicht.developpez.com...?page=fenetres
et la FAQ GUI
D'après ce que j'ai lu il est fortement conseillé de créer un thread à chaque fois que l'on veut faire du graphique, afin de ne pas ralentir l'interface graphique
Ma question est donc tout simple
Je souhaite faire :
1 - invocation d'une JFrame quasi vide (pour montrer que le programme est parti, voir je rajouterais une barre de chargement de base)
2 - Effectuer un traitement long
3 - Modifier ma fenêtre, ajouter par exemple des buttons
Ma question : comment dois-je m'y prend ?
Étant donné que je crée ma fenêtre dans un thread, il m'est ensuite impossible d'y accèder.
Les différents codes exemple que je trouve n'utilise pas de thread et du coup la JFrame est connu par le main, sauf que là, ça ne marche pas
Pour l'instant j'ai une classe contenant mon main qui ressemble à ceci
ma classe GUI
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 public class jeu { public static void main (String [] args)throws IOException { //[..] Sting s = ""; switch (i) { case 1 : s = "Morpion"; break; case 2 : s = "Puissance 4"; break; default : System.out.println("Erreur dans l'instancation des regles"); break; } SwingUtilities.invokeLater(new Runnable(){ public void run(){ //On crée une nouvelle instance de notre JDialog Gui fenetre = new Gui(s); fenetre.setVisible(true);//On la rend visible } }); //[...] mon traitement long // Ici j'aimerais modifier ma fenêtre ajouter des bouton en fonction du traitement long // je présume que l'ajout se ferra via de nouveau un thread afin de séparer application et GUI }
Merci de votre aide
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 import java.awt.*; import javax.swing.*; public class Gui extends JFrame{ private static final long serialVersionUID = 1L; public Gui(String title){ super(); build(title);//On initialise notre fenêtre } private void build(String title){ setTitle(title); //On donne un titre à l'application setSize(320,240); //On donne une taille à notre fenêtre setLocationRelativeTo(null); //On centre la fenêtre sur l'écran setResizable(true); //On autorise la redimensionnement de la fenêtre 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 FlowLayout()); panel.setBackground(Color.white); JLabel label = new JLabel("Match en cours"); panel.add(label); return panel; } public JButton createButton(String loc_icon) { JButton but = new JButton(loc_icon); return but ; } public JButton addButton(JPanel p, JButton but){ p.add(but); return but; } }
Partager