Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme rafraichissement

    25 mai 2015 à 17:13:14

    Bonjour et merci de vous interesser à mon probleme c'est ma premiere application java! n'hésiter pas a me signaler tous ce qui vous choque dans mon code !

    J'ai un souci de rafraichissement d'un JPanel comme indiqué, j'ai quand meme regarder sur google avant de venir vous embeter et il semble que les methode repaint() et revalidate() sont utiliser pour rafraichir un JPanel. Mais voilà j'y arrive po...

    Le JPanel et dans un menu je vais pas mettre tous le code ici il fais dans les 400 lignes , Je mets ce qui me parait important pour comprendre mon probleme si jamais, il vous faut de plus ample information je vous les fournirai avec joie^^. Sisi je galere vraiment la =S.

    Le JPanel d'affiche dans un JSplitPane est devrai s'actualiser quand l'utilisateur creer une nouvelle "Ville".

    Le JPanel contient une JTable generer à partir d'une AbtractTableModel.  dont voici le code

    public class Resumerpos extends AbstractTableModel
    {
    	// attribut
    	Salesman S;
    	
    //constructeur public Resumerpos(Menu m) { S=m.graphEnCour; } public int getColumnCount() { // ne changeras jamais --> on est dans un plan deux coordonees + le nom return 3; } public int getRowCount() { // Correspond au nombre de noeud du graph return S.listNoeud.size(); } public Object getValueAt(int indL, int indC) // rempli les cases { model.Ville n = (model.Ville) S.listNoeud.get(indL); switch (indC) { case 0 : return n.nom; case 1 : return n.posx; case 2 : return n.posy; } return null; } public String getColumnName(int idC)// afiche le nom des collones { switch(idC) { case 0 : return new String ("Nom"); case 1 : return new String ("position X"); case 2 : return new String ("position Y"); default : return null; } } }

    Le menu (heritage et attributs)

    public class Menu extends JFrame implements ActionListener, MouseListener, MouseMotionListener 
    {
    	double coordx;
    	double coordy;
    	public Salesman graphEnCour;
    	JPanel JF_Dessin_Aff;
    	Color color;
    	String couleur;
    	JMenuBar menuBar;
    	JFrame cont;
    	JPanel panelPrin;




    dans le constructeur du menu

    	if (graphEnCour != null)
    	{
    		Resumerpos tableresumerposition = new Resumerpos(this);
    		JTable table = new JTable (tableresumerposition);     // creer un Jtable à partir de tableresumerposition
    		JScrollPane tableContainer = new JScrollPane(table); // creer un scrollPane
    		panelPrin.add(tableContainer);
    				
    		tableContainer.setVisible(true);// je sais pas i les deux sont utiles..
    		panelPrin.setVisible(true);
    		}

    si il y a un graph deja instancie pas de souci sa s'affiche.

    Par contre sa ne ce mets pas a jour quand on rajoute une "ville" au graph. la ville est bien ajoutée j'ai verifié

    et si je recrée une JFrame avec le JPanel elle s'affiche avec tous les Noeuds déjà instanciés.

    if(arg0.getActionCommand().equals( "newVille" ))
    {
    	if (graphEnCour != null)// on crrer un JPanel avec des JTextFiedl pour recuperer l'input
    	{
    	        JTextField nomfield = new JTextField(20);
    		JTextField xfield = new JTextField(5);
    	        JTextField yfield = new JTextField(5);
    		JPanel addvillPanel = new JPanel();
    		addvillPanel.add(new JLabel (" nom :"));
    		addvillPanel.add(nomfield);
    		addvillPanel.add(new JLabel (" position x : "));
    		addvillPanel.add(xfield);
    		addvillPanel.add(new JLabel (" position y :"));
    		addvillPanel.add(yfield);
    		int result = JOptionPane.showConfirmDialog(null, addvillPanel, 
    	        "Please Enter X and Y Values", JOptionPane.OK_CANCEL_OPTION);
    		if (result == JOptionPane.OK_OPTION)// si l'utilisateur valide on cree la Ville
    		{
    			if(nomfield.getText()!=null && xfield.getText()!=null && yfield.getText()!=null)
    			{
    				String name = nomfield.getText();
    				int posx = Integer.parseInt(xfield.getText());
    				int posy = Integer.parseInt(yfield.getText());
    				graphEnCour.addNoeud(name,posx,posy);
    			}
    			else        // sinon message erreur
    			{
    				JOptionPane mess = new JOptionPane();
    			    	mess.showMessageDialog(this,"erreur mauvais input","erreur",JOptionPane.ERROR_MESSAGE);
    			}
    		}
    		}
    		else     // si aucun graph instancie erreur
    		{
    			JOptionPane mess = new JOptionPane();
    	    		mess.showMessageDialog(this,"erreur aucun graph instancié","erreur",JOptionPane.ERROR_MESSAGE);
    		}
                                             // une fois ces differentes étapes réalisé j'aimerais
    // que le JPanel s'actualise mais sa marche pas...
                   //this.panelPrin.repaint();
    	       //this.panelPrin.setVisible(true);
    		this.revalidate();
    		this.repaint();
    		this.setVisible(true);
    		}	


    Je suis persuadé que c'est une erreur de débutant toutes betes, mais sa fais deux jour que j'essaye et je commence a desesperer. Merci encore pour vos futures réponse / conseils.

    Cordialement



    • Partager sur Facebook
    • Partager sur Twitter
      25 mai 2015 à 21:33:08

      On ma conseiller de creer une classe qui gere mon JPanel et de surcharger PaintComponent(), est-ce que vous aurriez un exemple?
      • Partager sur Facebook
      • Partager sur Twitter
        26 mai 2015 à 9:35:43

        Pour ceux que sa interresse j'ai finalement trouvé ^^.

        au moment ou on change les donnée on recrer un model de table est on l'uptade avec fireTableDataChanged() Je ne sais pas si c'est la solution optimal mais sa marche bien pour moi.

        Resumerpos tableModel=new Resumerpos(this);
        table.setModel(tableModel);
        ((AbstractTableModel)table.getModel()).fireTableDataChanged();
        table.repaint();
        this.repaint();
        • Partager sur Facebook
        • Partager sur Twitter

        probleme rafraichissement

        × 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