Partage
  • Partager sur Facebook
  • Partager sur Twitter

Chargement Panel

problème de chargement de panel

Sujet résolu
    28 avril 2008 à 15:27:45

    Bonjour à tous!

    Je suis entrain de créer un analyseur de log. Ce programme en Java utilise la librairie JFreeChart. De ce coté là tout va bien. Ce qui coince pour le moment, c'est l'interface avec Swing.

    J'ai plusieurs classes qui implémentent des JPanel, qui contiennent mes graphiques, une classe qui contient mon menu et implémente la classe ActionListener, et bien entendu une classe principale (ma fenetre), qui contient le menu et un JPanel.

    Ce que je souhaiterai, mais qui ne marche pas pour le moment, c'est que lorsque je clique sur un de mes JMenuItem, mon mon JPanel de ma frame prenne la valeur d'un des JPanel que j'ai implémenté représentant mon graph.

    Cependant, lorsque j'éxecute mon programme, rien ne se passe lorsque je clique sur mes JItemMenu. Tout mes JPanel et frame sont en setVisible(true), et mes variables en publique.

    Quelqu'un aurait il une suggestion. Merci de l'aide que vous m'apporterez!
    • Partager sur Facebook
    • Partager sur Twitter
      28 avril 2008 à 16:09:58

      Comment tu ajoutes des JPanel dans ta JFrame ? Tu fais un setContentPane() ?
      Montres-nous ton code ! ^^
      • Partager sur Facebook
      • Partager sur Twitter
        28 avril 2008 à 16:18:47

        Salut,
        non je ne fait pas de setContentPane(), mais un getContentPane().
        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2008 à 16:27:44

          donc tu fais un truc du genre :
          //this = ta JFrame
          this.getContentPane().add(new monPanel());
          


          Mais montre ton code ! On ne peut guère aider à l'aveuglette...
          • Partager sur Facebook
          • Partager sur Twitter
            28 avril 2008 à 16:48:56

            Oki bon ben voila le code:

            Ma classe principale:
            package InterfaceHM;
            
            import java.awt.BorderLayout;
            import java.awt.Dimension;
            import java.awt.Toolkit;
            
            import javax.swing.JFrame;
            import javax.swing.JPanel;
            import javax.swing.JScrollPane;
            import javax.swing.JTree;
            import javax.swing.border.TitledBorder;
            import javax.swing.event.TreeSelectionEvent;
            import javax.swing.event.TreeSelectionListener;
            import javax.swing.tree.DefaultMutableTreeNode;
            import javax.swing.tree.TreeSelectionModel;
            
            public class JAnaLog extends JFrame implements TreeSelectionListener{
            
            	private JPanel graph;
            	private JPanel panel;
            	public Menu menu;
            	
            	/**
            	 * Launch the application
            	 * @param args
            	 */
            	public static void main(String args[]) {
            		// image
            		String path = "src\\Images\\splashScreen.jpg";
            		try {
            			JAnaLog frame = new JAnaLog();
            			frame.setVisible(true);
            		} catch (Exception e) {
            			e.printStackTrace();
            		}
            		// Splash Screen
            		//SplashWindow sw = new SplashWindow(path, new Frame(), 5000);
            	}
            
            	/**
            	 * Create the frame
            	 */
            	public JAnaLog() {
            		super();
            		setResizable(false);
            		setTitle("JAnaLog");
            		setBounds(100, 100, 800,600);
            		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            		
            		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            		Dimension myAppli = getPreferredSize();
            
            		panel = new JPanel();
            		panel.setLayout(null);
            		getContentPane().add(panel, BorderLayout.CENTER);
            
            		final JPanel selection = new JPanel();
            		selection.setBorder(new TitledBorder(null, "Données", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
            		selection.setLayout(null);
            		selection.setBounds(10, 10, 167, 432);
            		panel.add(selection);
            
            
            		graph = new JPanel();
            		graph.setBorder(new TitledBorder(null, "Graphique", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
            		graph.setBounds(183, 10, 601, 432);
            		panel.add(graph);
            
            		final JPanel param = new JPanel();
            		param.setBorder(new TitledBorder(null, "Paramètres", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
            		param.setLayout(null);
            		param.setBounds(10, 448, 774, 94);
            		panel.add(param);
            		
            		menu = new Menu(this);
            		add(menu,BorderLayout.NORTH);
            
            		//setLocation(screenSize.width/2 - (myAppli.width), screenSize.height/2 - (myAppli.height));
            	}
            }
            


            Ma classe Menu:
            /**
             * 
             */
            package InterfaceHM;
            
            import java.awt.BorderLayout;
            import java.awt.event.ActionEvent;
            import java.awt.event.ActionListener;
            import java.awt.event.KeyEvent;
            
            import javax.swing.ImageIcon;
            import javax.swing.JMenu;
            import javax.swing.JMenuBar;
            import javax.swing.JMenuItem;
            import javax.swing.KeyStroke;
            
            /**
             * @author Paul Laloyeau
             *
             */
            public class Menu extends JMenuBar implements ActionListener{
            
            	public JAnaLog current;
            	
            	public JMenu data;
            	public JMenu Ip;
            	public JMenu pages;
            	public JMenu log;
            	public JMenu insertIp;
            	public JMenu aide;
            	public JMenu graph;
            	
            	public JMenuItem insertIpFromFile;
            	public JMenuItem insertIpMan;
            	public JMenuItem modifierIp;
            	public JMenuItem supprimerIp;
            	
            	public JMenuItem insertLog;
            	public JMenuItem supprimerLog;
            	
            	public JMenuItem ajouterPage;
            	public JMenuItem supprimerPage;
            	public JMenuItem modifierPage;
            	public JMenuItem supprimertable;
            	
            	public JMenuItem pagesVues;
            	
            	public JMenuItem aPropos;
            	
            	/**
            	 * @param current
            	 */
            	public Menu(JAnaLog current) {
            		super();
            		this.current = current;
            		ImageIcon add = new ImageIcon("src\\Images\\add.png");
            		ImageIcon del = new ImageIcon("src\\Images\\del.png");
            		ImageIcon mod = new ImageIcon("src\\Images\\mod.png");
            		
            		data = new JMenu("Gestion des Données");
            		Ip = new JMenu("Adresse IP");
            		log = new JMenu("Fichier de Log");
            		pages = new JMenu("Suivi des Pages");
            		insertIp = new JMenu("Insérer une IP");
            		graph = new JMenu("Graphiques");
            		aide = new JMenu("Aide");
            		
            		insertIpFromFile = new JMenuItem("A partir d'un fichier",add);//ok
            		insertIpFromFile.addActionListener(this);
            		insertIpMan = new JMenuItem("Manuellement",add);//ok
            		insertIpMan.addActionListener(this);
            		insertLog = new JMenuItem("Insérer fichier de Log",add);//ok
            		insertLog.addActionListener(this);
            		supprimerLog = new JMenuItem("Supprimer Log",del);
            		supprimerLog.addActionListener(this);
            		ajouterPage = new JMenuItem("Ajouter une Page",add);//ok
            		ajouterPage.addActionListener(this);
            		supprimerPage = new JMenuItem("Supprimer une Page",del);//ok
            		supprimerPage.addActionListener(this);
            		modifierPage = new JMenuItem("Modifier une Page",mod);//ok
            		modifierPage.addActionListener(this);
            		modifierIp = new JMenuItem("Modifier IP",mod);//ok
            		modifierIp.addActionListener(this);
            		supprimerIp = new JMenuItem("Supprimer",del);//ok
            		supprimerIp.addActionListener(this);
            		aPropos = new JMenuItem("A Propos",KeyEvent.VK_T);
            		aPropos.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));
            		aPropos.addActionListener(this);
            		supprimertable = new JMenuItem("Effacer une Table",KeyEvent.VK_T);
            		supprimertable.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0));
            		supprimertable.addActionListener(this);
            		pagesVues = new JMenuItem("Pages Vues");
            		pagesVues.addActionListener(this);
            		
            		insertIp.add(insertIpFromFile);
            		insertIp.add(insertIpMan);
            		Ip.add(insertIp);
            		Ip.add(modifierIp);
            		Ip.add(supprimerIp);
            		pages.add(ajouterPage);
            		pages.add(modifierPage);
            		pages.add(supprimerPage);
            		log.add(insertLog);
            		log.add(supprimerLog);
            		
            		data.add(Ip);
            		data.add(log);
            		data.add(pages);
            		data.add(supprimertable);
            		graph.add(pagesVues);
            		aide.add(aPropos);
            		
            		add(data);
            		add(graph);
            		add(aide);
            	}
            
            	@Override
            	public void actionPerformed(ActionEvent e) {
            		Object  source=e.getSource();
            		if(source == insertIpFromFile) new InsertIpFromFile(current);
            		else{
            			if(source == insertIpMan) new InsertIpMan(current);
            			else{
            				if(source == insertLog) new InsertLog(current);
            				else{
            					if(source == ajouterPage) new AjouterPage(current);
            					else{
            						if(source == modifierPage) new ModifierPage(current);
            						else{
            							if(source == supprimerPage) new SupprimerPage(current);
            							else{
            								if(source == modifierIp) new ModifierIp(current);
            								else{
            									if(source == supprimerIp) new SupprimerIp(current);
            									else{
            										if(source == supprimerLog) new SupprimerLog(current);
            										else{
            											if(source == aPropos) new APropos(current);
            											else{
            												if(source == supprimertable) new SupprimerTable(current);
            												else{
            												     if(source == pageVues){
            														current.graph = new PagesVues();// JE pense que le problème viens de là...
            												      }
            												}
            											}
            										}
            									}
            								}
            							}
            						}
            					}
            				}
            			}
            		}
            	}
            
            }
            


            Mon label qui normalement devrai prendre la place de graph:
            package InterfaceHM;
            
            import javax.swing.JLabel;
            import javax.swing.JPanel;
            
            public class PagesVues extends JPanel {
            
            	/**
            	 * Create the panel
            	 */
            	public PagesVues() {
            		super();
            
            		final JLabel label = new JLabel();
            		label.setText("New JLabel");
            		add(label);
            		//
            		setVisible(true);
            	}
            
            }
            


            Donc ce que je souhaiterai, c'est qu'en cliquant sur le menu Graphique>PAges Vues, le panel graphe de la classe principale adopte la mm aapparence que mon panel PagesVues.
            • Partager sur Facebook
            • Partager sur Twitter
              28 avril 2008 à 16:55:01

              Dans ton actionPerformed, transforme ton source en JMenuItem :
              JMenuItem  source=(JMenuItem)e.getSource();
              //Pas sur que cela marche, je n'ai pas testé.
              // Si cela ne marche pas, laisse tel quel
              


              Et tes "==", utilise plutot la méthode .equals(ton objet a comparer)

              if(source == insertIpFromFile)
              
              //devient
              
              if(source.equals(insertIpFromFile))
              
              • Partager sur Facebook
              • Partager sur Twitter
                28 avril 2008 à 16:57:54

                Mon JMenu fonctionne, ce qui ne marche pas, c'est l'interaction entre le panel graph de ma frame et le JMenu. Cependant je pense que ta remarque me premettra de rendre mon code plus lisible.

                Merci
                • Partager sur Facebook
                • Partager sur Twitter
                  28 avril 2008 à 17:20:04

                  J'avais compris ;) Ce que je t'ai dit devrait faire fonctionner ton actionPerformed, ou du moins p e un peu mieux parce que tel qu'il est la, il ne fera jamais rien... autrement dit rien ne se passera quand tu cliquera sur un item de tes menus. :(

                  Autre point, tu vas me trouver tatillon, mais donner a ta classe le même nom qu'une classe existante (Menu) n'est pas forcement top, on sait jamais une erreur est si vite faite. :-°
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 avril 2008 à 17:30:30

                    Je t'ai fait un petit exemple d'interaction. J'ai une classe héritée de JFrame et deux classe héritée de JPanel : Une sui fait tout un fond bleu et l'autre tout un fond rouge.

                    On peu changer le fond en cliquant sur les boutons correspondant.

                    Fenetre.java
                    import java.awt.BorderLayout;
                    import java.awt.event.ActionEvent;
                    import java.awt.event.ActionListener;
                    
                    import javax.swing.JButton;
                    import javax.swing.JFrame;
                    import javax.swing.JPanel;
                    
                    
                    public class Fenetre extends JFrame {
                    
                    	private JButton bouton1, bouton2;
                    	private JPanel content = new JPanel();
                    	
                    	
                    	public Fenetre(){
                    		
                    		this.setSize(400, 400);
                    		this.setLocationRelativeTo(null);
                    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    		this.setLayout(new BorderLayout());
                    		content.setLayout(new BorderLayout());
                    		content.add(new PanelBleu(), BorderLayout.CENTER);
                    		
                    		this.getContentPane().add(content, BorderLayout.CENTER);
                    		this.getContentPane().add(build(), BorderLayout.SOUTH);
                    		
                    		this.setVisible(true);
                    		
                    	}
                    	
                    	private JPanel build(){
                    		
                    		JPanel pan = new JPanel();
                    		bouton1 = new JButton("panneau bleu");
                    		bouton1.setEnabled(false);
                    		bouton1.addActionListener(new Bouton1Listener());
                    		
                    		bouton2 = new JButton("panneau rouge");
                    		bouton2.addActionListener(new Bouton2Listener());
                    		
                    		pan.add(bouton1);
                    		pan.add(bouton2);
                    		
                    		return pan;
                    	}
                    	
                    	public static void main(String[] args){
                    		
                    		Fenetre fen = new Fenetre();
                    	}
                    	
                    	
                    	public class Bouton1Listener implements ActionListener{
                    
                    		public void actionPerformed(ActionEvent arg0) {
                    			content.add(new PanelBleu());
                    			content.revalidate();
                    			
                    			bouton1.setEnabled(false);
                    			bouton2.setEnabled(true);
                    		}
                    		
                    		
                    	}
                    	
                    	public class Bouton2Listener implements ActionListener{
                    
                    		public void actionPerformed(ActionEvent e) {
                    			
                    			content.add(new PanelRouge(), BorderLayout.CENTER);
                    			content.revalidate();
                    					
                    			bouton1.setEnabled(true);	
                    			bouton2.setEnabled(false);			
                    		}
                    		
                    		
                    	}
                    	
                    }
                    


                    PanelBleu.java
                    import java.awt.Color;
                    import java.awt.Graphics;
                    
                    import javax.swing.JPanel;
                    
                    
                    public class PanelBleu extends JPanel {
                    
                    	public void paintComponent(Graphics g){
                    		g.setColor(Color.blue);
                    		g.fillRect(0, 0, this.getWidth(), this.getHeight());
                    	}	
                    }
                    


                    PanelRouge.java
                    import java.awt.Color;
                    import java.awt.Graphics;
                    
                    import javax.swing.JPanel;
                    
                    
                    public class PanelRouge extends JPanel {
                    
                    	public void paintComponent(Graphics g){
                    		g.setColor(Color.red);
                    		g.fillRect(0, 0, this.getWidth(), this.getHeight());
                    	}	
                    }
                    


                    Lorsque tu mets à jours ton composant, il faut appeler la méthode revalidate().
                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 avril 2008 à 18:10:18

                      Merci pour tout, je vais tester tout ça!

                      It'a all right, ça marche nikel. En fait il me manquait que le revalidate();
                      Encore une fois merci pour vos réponses.

                      Je retire ce que j'ai dit, ça ne marche pas complétement, si je clique une première fois sur mon menu, ça change comme je le souhaite, mais si je reclique sur un autre ItemMenu, il ne se passe rien.

                      J'en finirai jamais de faire des édits ^^
                      Le problème évoqué précédement est réglé: j'ai utilisté la fonction Container.removeAll().
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Chargement Panel

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown