Pb d'evt de clic de souris:execute 4 fois l'evt au lieu d'une
kobee12
Messages postés153Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention31 octobre 2006
-
25 mars 2004 à 17:51
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 2012
-
29 mars 2004 à 19:37
Salut
j'ai cree un evt de clic de souris sur une table qui est static
Quand j'execute cet evenement, il passe deux fois dedans.
Le pb c'est que j'ai cree un test pour voir s'il s'agit d'un double clic et dans ce cas il ouvre un dialog. Quand je double clique il entre 4 fois dans ma methode, si bien qu'il m'ouvre deux fois mon dialog!!
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201211 25 mars 2004 à 18:18
GodConan :clown)
verifie ke ta pas abonner plusieur foi la meme class au listener de la table...
ensuite si tu veu etre sur que ta boite de dialogue ne soit instancier qu une foi : tu garde une reference dessu et tu test si != null ben tu fai rien ;o) comme sa t en aura qu une ;o)
kobee12
Messages postés153Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention31 octobre 20061 26 mars 2004 à 15:52
Je vois tjrs pas ou ca cloche.
Je vais mettre tout le code de ma classe. C'est un peu long mais si kelkun peu m'expliquer pourquoi ca marche pas ca servira a kelke chose.
Apparemment, j'ai remarque que ca viendrait du fait que ma table est static, car quand j'enleve static il execute bien la methode qu'une seule fois.
J'ai rajoute un boolean pour eviter qu'il fasse deux fois la methode.
J'ai mis en gras la declaration de ma table, la methode de la souris et sa declaration.
MainFrame pere;
Calendrier calend; public static JTable jTableSem <gras>new JTable(); DefaultTableModel df</gras> new DefaultTableModel(){
public boolean isCellEditable( int row, int col ){
return false; } };
public static int ligneSelect = -1;
public static int colonneSelect = -1;
Object[][] donnees = null;
public InfosJournee infos;
Color foreColor = new Color( 0, 0, 50 );
Hashtable couleur = new Hashtable( 10 );
// Couleur par defaut du font des en-têtes
Color defoBack = new Color( 194, 194, 194);
public TableSemainier(MainFrame pere, Calendrier calend) {
/**Initialiser le composant*/
private void jbInit() throws Exception {
// Couleur par defaut de fond de la table
jTableSem.setSelectionBackground(new java.awt.Color(204,204,255)); // bleu clair
// Couleur par defaut dd devant de la table
jTableSem.setSelectionForeground(java.awt.Color.black);
// Couleur de la grille de la table
jTableSem.setGridColor(new java.awt.Color(153,153,153)); //gris
pere.jScrollPane1.getViewport().add(jTableSem);
jTableSem.setBounds(0,0,400,400);
jTableSem.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
jTableSem_mouseClicked(e);
}
});
infos = new InfosJournee(calend, df, jTableSem);//, colDate);
creerTable();
for(int numJour=0; numJour<7;numJour++)
{
donnees = infos.getInfoBD(numJour);
for(int i=0;icouleur par defaut
lbl.setBackground( (back==null)?defoBack:back );
//Couleur du texte des en-têtes
lbl.setForeground( foreColor );
Font font = table.getFont();
lbl.setOpaque( true );
font = new Font( font.getName(), Font.BOLD, font.getSize() );
lbl.setFont( font );
lbl.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
lbl.setText( (String)value );
return lbl;
}
};
label.setHorizontalAlignment(JLabel.CENTER);
return label;
}
// dessine une colonne comme un header
class DemoCellRenderer extends JLabel
implements TableCellRenderer
{
boolean isBordered = true;
Color selectedForeground = null;
Color selectedBackground = null;
Color unselectedForegroundAlt = new Color( 255, 255, 255 );
Color unselectedBackgroundAlt = new Color( 100, 100, 200 );
Color unselectedForeground = null;
Color unselectedBackground = null;
public DemoCellRenderer()
{
super();
setOpaque(true); //pour ke le background soi fai( mai bon sa ser a rien ;o) ).
}
public Component getTableCellRendererComponent(
JTable table, Object val,
boolean isSelected, boolean hasFocus,
int row, int column)
{
setAlignmentX( CENTER_ALIGNMENT );
// s'assure du style de la font
Font f = getFont();
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201211 26 mars 2004 à 17:28
GodConan :clown)
et dailleur pourquoi est elle static ta table?!!!!
avec une table staic dc si tu a plusieur instance de ta class TableSemainier c normale car a chac foi tu abonne un nouveau listener sur la MEME table .... et dc plus tu crera de new TableSemainier plus tora de clic ;o) ....
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
kobee12
Messages postés153Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention31 octobre 20061 27 mars 2004 à 13:42
Je l'ai mis en static parce que j'utilise cette classe dans une autre classe, et quand je ne met pas static il ne m'execute rien. En effet je fais un test pour voir si ma variable textCell correpond a une chaine vide, et bizarrement testCell est tout le tps vide alors que ce n'est pas le cas.
En mettant static pour ma table il voit bien que textCell n'est pas vide. D'ailleurs, j'avais le meme pb avec ligneSelect et colonneSelect que j'ai mis en static. C'est peut etre pas bien de faire ca mais je sais comment il faut que je fasse.
Je met en dessous la declaration de ma classe TableSemainier et de la fonction qui utilise ces variables
dans ma classe MainFrame :
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201211 27 mars 2004 à 14:10
GodConan :clown)
c pas mal fouilli tous sa ;o); regarde les quelque exemple de JTable du site :) et compare avec le tien
ds mes sources je croi je montre quelque exemple qui peuvent t aider ...
les var Static ont une utilité bien particuliere et tu n en fai pas une bonne utilisation la ;o)..
kobee12
Messages postés153Date d'inscriptiondimanche 26 janvier 2003StatutMembreDernière intervention31 octobre 20061 29 mars 2004 à 19:30
ca y est ca marche!!
j'ai enleve les satics qui n'etait evidemment pas une bonne idee. Par contre appremment je devais lancer mon application une premiere fois et je ne la fermais pas. La deuxieme fois c'est la que ca plantouillait. Il devait y avoir en memoire plusieurs instance de la meme classe vu que je ne fermais pas l'application et c'est pour ca qu'il y avait un pb. En tout cas maintenant ca marche.
Merci pour votre aide et desole de vous faire perdre votre temps pour des conneries pareilles.
kobee12
:big)