IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

récupérer JPanel dans JFrame


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 36
    Par défaut récupérer JPanel dans JFrame
    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 :
    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
    			}
    		});
    	}
     
    }
    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
    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) {
    		//
    	}
    }
    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

    La classe JMenuBar est la suivante :
    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;
    	}
     
    }
    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 ?)
    Et la seconde veut fermer le JPanel toujours en passant la JFrame en argument.

    Code de l'ouverture :
    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();
        }
     
    }
    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...
    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.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le plus simple c'est de stocker la référence au panel quelque part (un objet quelconque que tu partagerais entre tes deux listeners). La création fait le new, le add et le stocke dans l'objet partagé. Pour la suppression, suffit de faire le remove()

Discussions similaires

  1. Changer Jpanel dans Jframe avec MVC
    Par ar0w4n4 dans le forum Débuter
    Réponses: 1
    Dernier message: 08/11/2010, 13h43
  2. Problème changement de JPanels dans JFrame
    Par david64 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 23/04/2010, 13h35
  3. Problème affichage JPanel dans JFrame
    Par Papipen dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 18/06/2009, 20h45
  4. Récupérer JPanel dans un JScrollPane dans un JTabbedPane
    Par orochimaru13 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 16/05/2008, 11h02
  5. JPanel dans JFrame non visible au lancement.
    Par PRomu@ld dans le forum Agents de placement/Fenêtres
    Réponses: 16
    Dernier message: 17/03/2006, 08h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo