Aller au contenu

Probleme affichage image en java


NiTrOuS

Messages recommandés

Bonjour,

je voudrais afficher des images en java a partir d une base de données postgresql

J ai donc une liste de voitures (marque et modele) et quand je clique sur l une d entre elles, la fiche de cette voiture s affiche avec sa photo s il y en a une. Voici mon probleme: quand j affiche la fiche d une premiere voiture avec photo, la photo s affiche bien, pas de probleme. Mais quand je veux afficher une seconde fiche (a la place de le premiere) tout se fait bien sauf l image qui reste celle de la premiere voiture.

Donc c est toujours la premiere photo affichee qui reste quelque soit la voiture que je choisis. Pourtant mon fichier temporaire que je crée lui change bien ... je ne comprend vraiment pas. Voici mon code:

package graphique;

import java.awt.*;

import javax.swing.*;
import java.awt.Rectangle;
import java.awt.Font;
import com.borland.dx.sql.dataset.Database;
import com.borland.dx.sql.dataset.ConnectionDescriptor;
import com.borland.dbswing.TableScrollPane;
import com.borland.dbswing.JdbTable;
import com.borland.dx.sql.dataset.QueryDataSet;
import com.borland.dx.sql.dataset.Load;
import com.borland.dx.sql.dataset.QueryDescriptor;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import com.borland.dbswing.JdbTextField;
import com.borland.dbswing.JdbLabel;
import java.io.File;
import java.io.FileInputStream;
import java.sql.*;
import java.io.FileOutputStream;
import java.io.InputStream;

class ListeVoiture2 extends JInternalFrame
{
public static Exception erreur=null;
	public ListeVoiture2()
	{
			setBounds(0, 0, 800, 550);
			setVisible(true);
			setClosable(true);
			setIconifiable(false);
			setMaximizable(false);
			setResizable(true);

	try {
		jbInit();
	} catch (Exception ex) {
		ex.printStackTrace();
	}
}

private void jbInit() throws Exception {
	this.getContentPane().setLayout(null);
	jLabel1.setFont(new java.awt.Font("Arial", Font.BOLD, 20));
	jLabel1.setText("Liste des voitures");
	jLabel1.setBounds(new Rectangle(305, 89, 180, 30));
	database1.setConnection(new ConnectionDescriptor(
	myconnections.JDBCConnection.url,
	myconnections.JDBCConnection.username,
	myconnections.JDBCConnection.password,false,
	myconnections.JDBCConnection.driver));
	tableScrollPane1.setBounds(new Rectangle(12, 118, 256, 200));
	queryDataSet1.setQuery(new QueryDescriptor(database1,
			"SELECT * FROM voitures", null, true, Load.ALL));
	jdbTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
	jdbTable1.setDataSet(queryDataSet1);
	jdbTable1.addMouseListener(new ListeVoiture2_jdbTable1_mouseAdapter(this));
	this.addMouseListener(new ListeVoiture2_this_mouseAdapter(this));
	jLabel2.setText("Marque:");
	jLabel2.setBounds(new Rectangle(3, 365, 75, 20));
	jLabel3.setText("Modèle:");
	jLabel3.setBounds(new Rectangle(161, 365, 75, 20));
	jLabel4.setText("Cylindrée:");
	jLabel4.setBounds(new Rectangle(3, 395, 75, 20));
	jLabel5.setText("Carburant:");
	jLabel5.setBounds(new Rectangle(161, 395, 75, 20));
	jLabel6.setText("Année:");
	jLabel6.setBounds(new Rectangle(3, 424, 75, 20));
	jLabel7.setText("Kilomètres:");
	jLabel7.setBounds(new Rectangle(161, 424, 75, 20));
	jLabel8.setText("Prix d\'achat:");
	jLabel8.setBounds(new Rectangle(3, 454, 75, 20));
	jLabel9.setText("Prix de vente:");
	jLabel9.setBounds(new Rectangle(161, 454, 75, 20));
	jLabel10.setText("F id:");
	jLabel10.setBounds(new Rectangle(3, 484, 75, 20));
	jdbTextField1.setColumnName("marque");
	jdbTextField1.setDataSet(queryDataSet1);
	jdbTextField1.setBounds(new Rectangle(68, 365, 75, 20));
	jdbTextField2.setColumnName("modele");
	jdbTextField2.setDataSet(queryDataSet1);
	jdbTextField2.setBounds(new Rectangle(233, 365, 75, 20));
	jdbTextField3.setColumnName("cylindree");
	jdbTextField3.setDataSet(queryDataSet1);
	jdbTextField3.setBounds(new Rectangle(68, 395, 75, 20));
	jdbTextField4.setColumnName("carburant");
	jdbTextField4.setDataSet(queryDataSet1);
	jdbTextField4.setBounds(new Rectangle(233, 395, 75, 20));
	jdbTextField5.setColumnName("annee");
	jdbTextField5.setDataSet(queryDataSet1);
	jdbTextField5.setBounds(new Rectangle(68, 424, 75, 20));
	jdbTextField6.setColumnName("km");
	jdbTextField6.setDataSet(queryDataSet1);
	jdbTextField6.setBounds(new Rectangle(233, 424, 75, 20));
	jdbTextField7.setColumnName("prix_achat");
	jdbTextField7.setDataSet(queryDataSet1);
	jdbTextField7.setBounds(new Rectangle(68, 454, 75, 20));
	jdbTextField8.setColumnName("prix_vente");
	jdbTextField8.setDataSet(queryDataSet1);
	jdbTextField8.setBounds(new Rectangle(233, 454, 75, 20));
	jdbTextField9.setText("jdbTextField9");
	jdbTextField9.setColumnName("f_id");
	jdbTextField9.setDataSet(queryDataSet1);
	jdbTextField9.setBounds(new Rectangle(233, 484, 75, 20));
	jdbTextField10.setColumnName("vendu");
	jdbTextField10.setDataSet(queryDataSet1);
	jdbTextField10.setBounds(new Rectangle(68, 484, 75, 20));
	jLabel11.setText("Vendu:");
	jLabel11.setBounds(new Rectangle(161, 484, 75, 20));
	jLabel13.setColumnName("img");
	jLabel13.setDataSet(queryDataSet1);
	jLabel13.setBounds(new Rectangle(346, 137, 400, 300));
	jLabel12.setText("V id:");
	jLabel12.setBounds(new Rectangle(3, 335, 75, 20));
	jdbTextField11.setColumnName("v_id");
	jdbTextField11.setDataSet(queryDataSet1);
	jdbTextField11.setBounds(new Rectangle(68, 335, 75, 20));
	this.getContentPane().add(jLabel1);
	this.getContentPane().add(tableScrollPane1);
	this.getContentPane().add(jLabel13);
	this.getContentPane().add(jLabel12);
	this.getContentPane().add(jLabel2);
	this.getContentPane().add(jLabel4);
	this.getContentPane().add(jLabel6);
	this.getContentPane().add(jLabel8);
	this.getContentPane().add(jLabel10);
	this.getContentPane().add(jdbTextField11);
	this.getContentPane().add(jdbTextField1);
	this.getContentPane().add(jdbTextField3);
	this.getContentPane().add(jdbTextField5);
	this.getContentPane().add(jdbTextField7);
	this.getContentPane().add(jdbTextField10);
	this.getContentPane().add(jLabel3);
	this.getContentPane().add(jLabel5);
	this.getContentPane().add(jLabel7);
	this.getContentPane().add(jLabel9);
	this.getContentPane().add(jLabel11);
	this.getContentPane().add(jdbTextField2);
	this.getContentPane().add(jdbTextField4);
	this.getContentPane().add(jdbTextField6);
	this.getContentPane().add(jdbTextField8);
	this.getContentPane().add(jdbTextField9);
	tableScrollPane1.getViewport().add(jdbTable1);
	jdbTable1.setHiddenColumns(new int[]{3,4,5,6,7,8,9,10,11});
}

JLabel jLabel1 = new JLabel();
Database database1 = new Database();
TableScrollPane tableScrollPane1 = new TableScrollPane();
JdbTable jdbTable1 = new JdbTable();
QueryDataSet queryDataSet1 = new QueryDataSet();
JLabel jLabel2 = new JLabel();
JLabel jLabel3 = new JLabel();
JLabel jLabel4 = new JLabel();
JLabel jLabel5 = new JLabel();
JLabel jLabel6 = new JLabel();
JLabel jLabel7 = new JLabel();
JLabel jLabel8 = new JLabel();
JLabel jLabel9 = new JLabel();
JLabel jLabel10 = new JLabel();
JdbTextField jdbTextField1 = new JdbTextField();
JdbTextField jdbTextField2 = new JdbTextField();
JdbTextField jdbTextField3 = new JdbTextField();
JdbTextField jdbTextField4 = new JdbTextField();
JdbTextField jdbTextField5 = new JdbTextField();
JdbTextField jdbTextField6 = new JdbTextField();
JdbTextField jdbTextField7 = new JdbTextField();
JdbTextField jdbTextField8 = new JdbTextField();
JdbTextField jdbTextField9 = new JdbTextField();
JdbTextField jdbTextField10 = new JdbTextField();
JLabel jLabel11 = new JLabel();
JdbLabel jLabel13 = new JdbLabel();
JLabel jLabel12 = new JLabel();
JdbTextField jdbTextField11 = new JdbTextField();
public void jdbTable1_mouseClicked(MouseEvent e) throws Exception {
int id = Integer.parseInt(jdbTextField11.getText());
chargeIMG(id);
}

public void chargeIMG(int v_id) throws Exception
{
	FileOutputStream ostreamImage = null;
	InputStream istreamImage = null;
	jLabel13.setIcon(null);
	File monImage = null;
	PreparedStatement ps = null;
	ResultSet rs = null;
	int i=0;
	monImage = new File("c:/tmp.jpg");
	ostreamImage = new FileOutputStream(monImage);
	try
	{
		ps = myconnections.Connectable.dbConnect.prepareStatement("select img from voitures where v_id=?");
		try
		{
			ps.setInt(1,v_id);
			rs = ps.executeQuery();
			try
			{
				if(rs.next())
				{
					istreamImage = null;
					istreamImage = rs.getBinaryStream("img");
					byte[] buffer = new byte[1024];
					int length = 0;
					while((length = istreamImage.read(buffer)) != -1)
					{
						ostreamImage.write(buffer, 0, length);
					}
						ImageIcon img1 = null;
						img1 = new ImageIcon(monImage.getAbsolutePath());
						jLabel13.setIcon(img1);
						i=1;
				}
			}
			finally
			{
				rs.close();
			}
		}
		finally
		{
			ps.close();
		}
	}
	finally
	{
		ostreamImage.close();
		if(i==0)
		{
			jLabel13.setText("Aucune image n'est disponible");
		}
	}
}
}

class ListeVoiture2_jdbTable1_mouseAdapter extends MouseAdapter {
private ListeVoiture2 adaptee;
ListeVoiture2_jdbTable1_mouseAdapter(ListeVoiture2 adaptee) {
	this.adaptee = adaptee;
}

public void mouseClicked(MouseEvent e) {
	try {
		adaptee.jdbTable1_mouseClicked(e);
	} catch (Exception ex) {
	}
}
}


class ListeVoiture2_this_mouseAdapter extends MouseAdapter {
private ListeVoiture2 adaptee;
ListeVoiture2_this_mouseAdapter(ListeVoiture2 adaptee) {
	this.adaptee = adaptee;
}

}

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Ah, du code généré avec jbuilder, ce que c'est laid.

Bon, le problème de l'image chargée mais pas affichée, c'est un "problème" récurrent avec java.

Au hasard, je dirais qu'il te manque un appel à repaint() sur l'objet à updater.

Vu la gueule du code, j'ai pas trop envie de chercher mais bon, un simple objet.repaint(); après le chargement de l'image devrait suffire.

Si j'ai bien compris le code (juste une lecture de 5s, c'est trop moche, pas envie de tester), un simple: jLabel13.repaint(); ou une méthode équivalente devrait faire l'affaire.

Chtit, toujours présent quand y'a des questions en java.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...