begin process at 2012 02 13 04:50:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Général

 > 

JTable- clic sur image


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

JTable- clic sur image

jeudi 21 février 2008 à 10:00:25 | JTable- clic sur image

thassa

bonjour,
Le code ci-dessous affiche un tableau contenant des images.
le problème est que si je clique pour la premiere fois sur l'image pour afficher une nouvelle fenêtre,l'image se décale seulement et c'est lorsque je clique pour la deuxieme fois que la fenêtre s'affiche.
Mon but est d'afficher la fenêtre dès le premier clic sur l'image sans qu'elle soit décalée.
(j'utilise swing + eclipse)

import java.awt.event.*;
import javax.swing.AbstractCellEditor;
import javax.swing.table.TableCellEditor;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;

public class Ess4 extends JFrame {

    protected ImageIcon createImageIcon(String path, String description)
    {
            java.net.URL imgURL = getClass().getResource(path);
            if (imgURL != null)
            {
                return new ImageIcon(imgURL, description);
            } else
            {
                System.err.println("Couldn't find file: " + path);
                return null;
            }
    }
 
public Ess4() {
 
    JTable table = new JTable(new MonModele());
  
 table.getColumn("image").setCellRenderer(new ImageRendererr());
 table.getColumn("image").setCellEditor(new ImageEditorr());
 
    JScrollPane scroll = new JScrollPane(table);
    getContentPane().add(scroll);
    setSize(400, 100);
    setVisible(true);
  }
//definition du modele
  class MonModele extends AbstractTableModel
{  
      ImageIcon im1=createImageIcon("images/montre.jpg","montre");
      ImageIcon im2=createImageIcon("images/montre.jpg","montre");

        String columnNames[]={ "image", "String" };
        Object[][] data={ { im1, "foo" },{ im2, "bar" } };
    
       public int getColumnCount() {
           return columnNames.length;
       }

       public int getRowCount() {
           return data.length;
       }

       public String getColumnName(int col) {
           return columnNames[col];
       }

       public Object getValueAt(int row, int col) {
           return data[row][col];
       }

       public Class getColumnClass(int c) {
           return getValueAt(0, c).getClass();
       }

       public boolean isCellEditable(int row, int col) { 
               return true;
       }
  } //Fin MonModele
 
  public static void main(String[] args) {
 
    Ess4 frame = new Ess4();
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }
}
//fin Ess4

//definition du renderer pour afficher l image dans un JLabel
class ImageRendererr implements TableCellRenderer {

  public Component getTableCellRendererComponent(JTable table, Object value,
      boolean isSelected, boolean hasFocus, int row, int column) {
      ImageIcon i=(ImageIcon)value;
  JLabel label=new JLabel(i);
    return label;
  }
}// fin ImageRendererr

//definition du Editor pour traiter l évènement de clic
class ImageEditorr extends AbstractCellEditor implements TableCellEditor {
  protected JLabel labelImage;
  ImageIcon i;
  private boolean isPushed;

  public ImageEditorr() {
      labelImage = new JLabel();
      labelImage.setOpaque(true);
      labelImage.addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
          System.err.println("clic");
          fireEditingStopped();
       
      }
    });
  }

  public Component getTableCellEditorComponent(JTable table, Object value,
      boolean isSelected, int row, int column) {
 
    i=(ImageIcon)value;
      labelImage.setIcon(i);
    isPushed = true;
    return labelImage;
  }

  public Object getCellEditorValue() {
    if (isPushed) {
      JFrame f=new JFrame("bon!");
      f.pack();
      f.setVisible(true);
    }
    isPushed = false;
    return i;
  }

 public boolean stopCellEditing() {
    isPushed = false;
    return super.stopCellEditing();
  }

  protected void fireEditingStopped() {
    super.fireEditingStopped();
  }
}//fin ImageEditorr

quelqu'un aura-t-il une idée?
merci
lundi 25 février 2008 à 11:02:17 | Re : JTable- clic sur image

uhrand

Réponse acceptée !
Enlève le CellEditor et ajoute un MouseListener à la JTable:

    private JTable table;
...
    public Ess4() {

        table = new JTable(new MonModele());
        table.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                int row = table.getSelectedRow();
                int column = table.getSelectedColumn();
                if (column == 0) {
                    System.out.println("mouseClicked row: " + row + "  column: " + column);
                    JFrame f = new JFrame("bon!");
                    f.pack();
                    f.setVisible(true);
                }
            }
        });
        table.getColumn("image").setCellRenderer(new ImageRendererr());

        JScrollPane scroll = new JScrollPane(table);
        getContentPane().add(scroll);
        setSize(400, 100);
        setVisible(true);
    }



Cette discussion est classée dans : public, int, import, return, swing


Répondre à ce message

Sujets en rapport avec ce message

Appel d'une classe depuis une autre [ par colruyt ] Bonjour a tous ,J'ai une classe qui fonctionne bien exécutée seule par contre quand je l'appelle depuis une autre , cela ne fonctionne pas !Si quelqu' Appel de classes semblables [ par colruyt ] Bonjour à tous,Voici le problème qui se pose à moi :Dans ma classe principale , je fait appel à 2 classes et chacunes de celle-ci affiche le contenu d Erreur d'execution: java.lang.NullPointerException [ par amjad ] A la compilation d'un projet java3D j'obtient le message d'erreur suivant :Exception in thread "main" java.lang.NullPointerException at javax.vecmath ajouter dans cette table des button (JAVA JTABLE JBUTTON) [ par zarziszita ] salut a toutes le monde mon probleme que j'ai envie ajouter deux button a la fin de table une des button permet ajouter un ligne .le methode main se t Help [ par fredspv ] Que faire avec les erreurs du ptit prog suivant ?public class Nat{ int n; public Nat(int n){ this.n=n; } public int getValue(){ return n; probleme de raffraichissement d'image [ par Azdruyel ] Bonjour a tous!Aujourd'hui,un nouveau jour, et donc un nouveau probleme!!!Alors voila, mon truc c'est que j'affiche en fond dans un JPanel une image ( JTable éditeur de couleur [ par jc_romeo ] BonjourJe voudrais faire une JTable avec le fait que quand on clique sur une des cases on puisse changer sa couleur de fond.j'ai donc créer la classe: Problème rafraichissement image avec Swing [ par ejouvin ] Bonjour.Je suis en train de faire une petite application qui contient une arborescence à gauche et une fenêtre de détail sur la droite.Dans le code su Pb avec une JTable et getSelctedRow() [ par gyome314 ] Salut les jeunes !Voila mon pb...Dans une interface graphique, je cherche éditer une liste de fichiers sous la forme d'une JTable avec une seule colon JTable : afficher une Date [ par isako ] Bonjour,Ce sujet n'est pas nouveau dans le forum, mais je n'ai pas trouvé la solution... Je vous soumets mon problème en espérant que l'un de vous pou


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,137 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales