Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/06/2008, à 10:08

homy

[Java-Graphique] Problème fonction plus rafraichissement JLabel

Bonjour,
j'ai deux problèmes en un déjà ma fonction getprix(), qui ce charge d'un petit calcule de prix dans laquelle j'ai des problèmes en passant des string en int. Le deuxième problème est le faite que le prix peut etre modifier souvent et je ne sais pas rafraîchir le JLabel voici le code le problème ce tronve donc dans getprix() et dans l'insertion du JLabel

insertion du JLabel

			try 
			{
			prix = getprix();
			}
			catch (SQLException e)
			{ 
				e.printStackTrace();
			}
			total = new JLabel("Prix :" + prix );
			Liste.add(total);
			repaint();

fonction getprix()

		public double getprix()
			throws SQLException 
			{
			ResultSet resultats;
			double prixsal;
			boolean service;
			int id;
			int nbjour;
			double prixtot=0;
			String num = getsal();
			String phrase = getnbjour();
			ConnecteurBDD connecteurBD = new ConnecteurBDD();
		    Statement instruction;
		    id = Integer.parseInt(num);
		    instruction = connecteurBD.getConnexion().createStatement();
		    resultats = instruction.executeQuery("SELECT prix_uni FROM salle WHERE num_sal= " +id+ ";");
		    resultats.first();
		    prixsal = resultats.getRow();
		    service = getservice();
		    nbjour = Integer.parseInt(phrase);
			
		    if (service==true){
				prixtot = (prixsal*nbjour)+((15*(prixsal*nbjour))/100);
			}
			if (service==false){
				prixtot = (prixsal * nbjour);
			}
			
			return prixtot;
		}

s'il vous faut l'ensemble du code demandez moi.

merci

Dernière modification par homy (Le 04/06/2008, à 11:20)

Hors ligne

#2 Le 04/06/2008, à 15:27

homy

Re : [Java-Graphique] Problème fonction plus rafraichissement JLabel

personne pour m'aide dans mon java?

Hors ligne

#3 Le 04/06/2008, à 17:39

obiwankennedy

Re : [Java-Graphique] Problème fonction plus rafraichissement JLabel

il me faudrai plus de code autour du try pour voir où il se situe dans ton programme.
Déja, ton JLabel "total" tu fais un new ? C'est pas plus simple de faire juste un total.setText(prix); ? (en ayant fait le new une seule fois avant?)
ensuite utilise plutôt UpdateUI() (et les fonctions soeurs) qu'un vieux repaint.


Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam

Hors ligne

#4 Le 04/06/2008, à 18:12

homy

Re : [Java-Graphique] Problème fonction plus rafraichissement JLabel

voila le code dans sont ensemble panique pas je le commente plus bas:

	import javax.swing.*;
	import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;

	public class AjoutLoc extends JPanel {
		
		//Attribut prives
		
		//private JTextField saisieIdentifiant = new JTextField(4);
		double prix;
		private static String dateNow;
		private JComboBox cli;
		private JComboBox sal;
		private JPanel Liste;
		private JLabel total;
		private static String [] client = {"Vide"};
		private static String [] salle = {"Vide"};
		private JCheckBox serv;
		private JTextField saisieNbJour = new JTextField(4);
		private JTextField saisieDateDebut = new JTextField(10);	
		private JButton test;
		// Constructeur
		public AjoutLoc()
		{
			// Cr�ation d'un panneau utilisant un layout GridLayout de 7 lignes par 1 colonnes avec un �cart de 5
			//pixels entre les composants
			
			Liste = new JPanel(new GridLayout(7,1,5,5));
			cli = new JComboBox();	
			sal = new JComboBox();
			serv = new JCheckBox("(+15% du prix)",null,false); 
			serv.setSelected(false);
			
			try 
			{
				recup_client();  /////////////************** JPB  **///////////
				cli = new JComboBox(client);///  pour mise a jour immediate JPB  ///
				recup_salle();
				sal = new JComboBox(salle);
			} 
			catch (SQLException e)
			{ 
				e.printStackTrace();
			}
			
			Liste.add(this.cli);
			Liste.add(this.sal);
			Liste.add(new JLabel("Nombre de Jour :"));
			Liste.add(this.saisieNbJour);
			saisieNbJour.setText("1");
			Liste.add(new JLabel("Date de début :"));
			Liste.add(this.saisieDateDebut);
			remplir_date();
			saisieDateDebut.setText( dateNow) ;
			Liste.add(new JLabel("Inclure les Services :"));
			Liste.add(serv); 
			try 
			{
			prix = getprix();
			}
			catch (SQLException e)
			{ 
				e.printStackTrace();
			}
			total = new JLabel("Prix :" + prix );
			Liste.add(total);
			repaint();
			test = new JButton("test");
			Liste.add(test);
	test.addActionListener(new ActionListener(){
				
				public void actionPerformed(ActionEvent ev) {

					EventQueue.invokeLater(new Runnable() {
						public void run() { 
							prix = 50;
							total = new JLabel("Prix :"  +prix );
							total.updateUI();
							Liste.add(total);
						}
					});
				}
	});
							
			setLayout(new BorderLayout(5,5));
			add(Liste,BorderLayout.CENTER);
			
		}
		
		
		public String getcli() {
//////		/   JPB   ///////		
				int Val = (cli.getSelectedItem().toString().indexOf("|"));
				String Ret = cli.getSelectedItem().toString().substring(0, Val);
				//JOptionPane.showMessageDialog(null, Ret); // test pour afficher le contenu de ret 
				return Ret;
			}
		
		public String getsal() {
//////		/   JPB   ///////		
				int Val = (sal.getSelectedItem().toString().indexOf("|"));
				String Ret = sal.getSelectedItem().toString().substring(0, Val);
				//JOptionPane.showMessageDialog(null, Ret); // test pour afficher le contenu de ret 
				return Ret;
			}
		
		public String getnbjour(){
			return this.saisieNbJour.getText();
			
		}
		
		public String getdatedebut(){
			return this.saisieDateDebut.getText();
		}		
		
		public boolean getservice(){
			total = new JLabel("Prix :" + 50 );
			total.repaint();
			return serv.isSelected();
		}
		
		public double getprix()
			throws SQLException 
			{
			ResultSet resultats;
			JDBCAdapter database;
			String rq;
			double prixsal=100;
			boolean service;
			int nbjour=4;
			double prixtot=0;
			String num = getsal();
			String phrase = getnbjour();
			ConnecteurBDD connecteurBD = new ConnecteurBDD();
		    Statement instruction;
		    instruction = connecteurBD.getConnexion().createStatement();
		    //resultats = instruction.executeQuery("SELECT prix_uni FROM salle where num_sal= ");
		    resultats = instruction.executeQuery("SELECT prix_uni FROM salle WHERE num_sal='".concat(num).concat("';"));
		    prixsal = resultats.getRow();
		    //resultats.first();
		    //prixsal = resultats.getDouble(1);
		    //prixsal = resultats.getRow();
		    resultats.close();
		
		    /*	rq="SELECT prix_uni from salle order by 1;";
			String driver="com.mysql.jdbc.Driver";
			String url="jdbc:mysql://localhost/java_loc";
			String user="root";
			String pwd="";
			database = new JDBCAdapter(driver,url,user,pwd);
			resultats = database.executeQuery(rq);*/
			
		    service = getservice();
		    //nbjour = Integer.parseInt(phrase);
			
		    if (service==true){
				prixtot = (prixsal*nbjour)+((15*(prixsal*nbjour))/100);
			}
			if (service==false){
				prixtot = (prixsal * nbjour);
			}
			
			return prixtot;
		}
							
		protected static void ajouterloc(AjoutLoc ajoutloc)
	    throws SQLException
	   {
			ConnecteurBDD connecteurBD = new ConnecteurBDD();
	        Statement instruction;
	        instruction = connecteurBD.getConnexion().createStatement();
	        instruction.executeUpdate("INSERT INTO location (id_cl,id_sal,nbjour,date_debut,service, total )" + 
			"VALUES('"+ajoutloc.getcli()+"','"+ajoutloc.getsal()+"','"+ajoutloc.getnbjour()+"','"+ajoutloc.getdatedebut()+"','"+ajoutloc.getservice()+"','" + ajoutloc.getprix()+ "')");
	        instruction.close();
	   }
		
		protected static void recup_client()
		throws SQLException
		{
		    ConnecteurBDD connecteurBD = new ConnecteurBDD();
		    Statement instruction;

		    instruction = connecteurBD.getConnexion().createStatement();
		    ResultSet resultats = instruction.executeQuery("SELECT * FROM client");

	        resultats.last();
	        int fd = resultats.getRow();
	        resultats.first();
	        client = new String[fd];
	     
	        boolean encore = true;
	        int i=0;
	        while (encore) {
	        client[i]=resultats.getString(1)+ " | " + resultats.getString(2)+ " | " + resultats.getString(3);
	        encore = resultats.next();
	        i++;
	        }
	        resultats.close();

		    }
		
		protected static void recup_salle()
		throws SQLException
		{
		    ConnecteurBDD connecteurBD = new ConnecteurBDD();
		    Statement instruction;

		    instruction = connecteurBD.getConnexion().createStatement();
		    ResultSet resultats = instruction.executeQuery("SELECT * FROM salle");

	        resultats.last();
	        int fd = resultats.getRow();
	        resultats.first();
	        salle = new String[fd];
	     
	        boolean encore = true;
	        int i=0;
	        while (encore) {
	        salle[i]=resultats.getString(1)+ " | " + resultats.getString(2)+ " | " + resultats.getString(4)+ " | " + resultats.getString(6);
	        encore = resultats.next();
	        i++;
	        }
	        resultats.close();

		    }
		
		protected static void remplir_date()
		{
			String format = "dd/MM/yy";

			java.text.SimpleDateFormat formater = new java.text.SimpleDateFormat( format );
			java.util.Date date = new java.util.Date();
			dateNow = formater.format( date ).toString();
		}

	}

voila tout le problème est dans prix = getprix(); pour afficher prix dans un JLabel.

probleme n1:

dans la fonction elle même getprix() je n'arrive pas a récuperer le champs prix_uni et à le mettre dans prixsal. le problème doit ce situer à

prixsal = resultats.getRow();

problème n2:

La variable prix que j'affiche dans un JLabel une fois modifier (par la Jliste, JCheckbox et JTextField) la JLabel ne ce rafraîchie pas donc elle garde le prix de base en construisant le JPanel.

Hors ligne

#5 Le 05/06/2008, à 09:26

obiwankennedy

Re : [Java-Graphique] Problème fonction plus rafraichissement JLabel

C'est ce que je pensais.  Le Label total n'est jamais le même.

total = new JLabel("Prix :" + prix );
            Liste.add(total);
            repaint();
            test = new JButton("test");
            Liste.add(test);
    test.addActionListener(new ActionListener(){
                
                public void actionPerformed(ActionEvent ev) {

                    EventQueue.invokeLater(new Runnable() {
                        public void run() { 
                            prix = 50;
                            total = new JLabel("Prix :"  +prix );
                            total.updateUI();
                            Liste.add(total);
                        }
                    });
                }
    });

en gros, ce que tu fais là: tu crées un label tu y mets une valeur. Tu l'ajoutes à ton panel puis tu crées un bouton et si on clique sur le bouton en gros ça doit mettre à jour la valeur. Le problème c'est que tu crées une instance de JLabel et du coup tu perds la référence pour le 1er. Et je pense que en ajoutant la nouvelle instante elle est placée dans une zone invisible.

total = new JLabel("Prix :" + prix );
            Liste.add(total);
            repaint();
            test = new JButton("test");
            Liste.add(test);
    test.addActionListener(new ActionListener(){
                
                public void actionPerformed(ActionEvent ev) {

                    EventQueue.invokeLater(new Runnable() {
                        public void run() { 
                            prix = 50;
                            total.setText("Prix :"  +prix );
                            total.updateUI();
                          
                        }
                    });
                }
    });

Donc la tu gardes la  même instance et tu modifies uniquement le texte qu'il doit afficher.



resultats = instruction.executeQuery("SELECT prix_uni FROM salle WHERE num_sal= " +id+ ";");

            prixsal = resultats.getRow();
            service = getservice();
            nbjour = Integer.parseInt(phrase);

j'écrirai plutôt:

resultats = instruction.executeQuery("SELECT prix_uni FROM salle WHERE num_sal= " +id+ ";");

            prixsal = resultats..getInt("prix_uni");
            service = getservice();
            nbjour = Integer.parseInt(phrase);

Dernière modification par obiwankennedy (Le 05/06/2008, à 09:30)


Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam

Hors ligne