Bonjour,
Je débute dans l'utilisation de swing et je pense que je dois faire une grosse connerie quelque part car je n'arrive pas à mes fins.
En gros, j'ai une JFrame avec dedans un JPanel. Lorsque je clique sur une entrée de mon menu, j'ai le JPanel qui s'affiche. Je veux que lorsque je clique sur un autre bouton de mon menu, le JPanel se ferme.
Il est possible que je n'ai pas bien compris l'organisation du code entre les différentes briques mais voilà comment je me suis organiser
Une classe main qui lance mon appli :
Ce fenêtre appelle simplement la création de la JFrame. Le code de la classe MainWindowFrame est le suivant :
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 public class Launch { /** * @param args */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { // On crée une nouvelle instance de notre JDialog MainWindowFrame fenetre = new MainWindowFrame(); fenetre.setVisible(true);// On la rend visible } }); } }
Comme vous pouvez le voir, je crée ma Jframe en lui spécifiant quelques infos (titre, size, etc) et je lui ajoute un JMenuBar qui va contenir mon menu
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 public class MainWindowFrame extends JFrame implements ActionListener { /** The viewer menu bar */ private MenuBar menuBar; private TestPanel testPanel; public MainWindowFrame() { super(); build(); } private void build() { setTitle("24-SD Manager v0.0.1"); setExtendedState(Frame.MAXIMIZED_BOTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); // ajout du menu menuBar = new MenuBar(this); setJMenuBar(menuBar); } public void actionPerformed(ActionEvent e) { // } }
La classe JMenuBar est la suivante :
Comme vous le voyez, j'ai deux entrées dans mon menu. La premiere appelle l'action AfficheJPanel (en passant la JFrame en argument... c'est crade non ?)
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 public class MenuBar extends JMenuBar { private static final long serialVersionUID = -5980076560722716681L; private JFrame mainFrame; public MenuBar(JFrame mainFrame) { this.mainFrame = mainFrame; // création du menu add(createFileMenu()); } /** Creates the menu */ private JMenu createFileMenu() { JMenu menu = new JMenu("Client"); JMenuItem item = null; // Assemble the submenus of the Other menu. menu.add(item = new JMenuItem("ouvrir TestJPanel")); item.addActionListener(new AfficheJPanel(mainFrame)); // Assemble the submenus of the Other menu. menu.add(item = new JMenuItem("Vider la fenetre")); item.addActionListener(new ClearJPanel(mainFrame)); return menu; } }
Et la seconde veut fermer le JPanel toujours en passant la JFrame en argument.
Code de l'ouverture :
Par contre, je bloque pour la fermeture car je voulais faire comme pour l'ouverture. Seul hic : Je ne vois absolument pas comment je peux récupérer mon JPanel dans ma JFrame. Je ne peux pas l'attaquer par un nom ou autre...
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 public class AfficheJPanelextends AbstractAction { private static final long serialVersionUID = -4189964184339249786L; JFrame mainFrame; public AfficheJPanel(JFrame mainFrame) { super("Afficher JPanel"); this.mainFrame = mainFrame; } public void actionPerformed(ActionEvent evt) { mainFrame.add(new TestPanel()); mainFrame.getRootPane().repaint(); mainFrame.getRootPane().revalidate(); } }
Du coup, je me dis que je ne dois pas forcément mettre les choses au bon endroit vu que je n'arrive pas à les récupérer ensuite.
Vous auriez une idée ou tout du moins une piste sur la connerie que je fais ?
Par avance merci.
Partager