MouseListener sur JTable désactivée

[Résolu]
Signaler
Messages postés
54
Date d'inscription
dimanche 12 septembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007
-
Messages postés
75
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009
-
bonjour à tous

j'ai une JTable que j'ai désactivée pour ne pas pouvoir en modifier le contenu

seulement j'aurai quand même besoin de pouvoir cliquer sur les cellules
pour en connaitre leur position afin de lancer diverses fonctions

or avec un MouseListener sur une JTable en
.setEnabled(false);        je n'obtient
pas de coordonnées mais -1 / -1

avez-vous une idée sur le "comment que je pourrais faire" ?


merci d'avance





don't cross the crocked step

10 réponses

Messages postés
75
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009
32
Salut,

1) Pour "désactiver" les cellule d'un JTable, il faudrait plutot le faire en écrivant un TableModel (extends AbstractTableModel), et en réécrivant la méthode public boolean isCellEditable(int row, int col). Voir : http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#data

2) Pour récupérer la cellule au la colonne séléctionné, il faudrait plutot utiliser un ListSelectionListener. Voir : http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#selection

Sorry
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
et de toute ;o) facon si le coeurs t en di ;o) avec les coord de la souris en pixel tu peu facilement recalculer ca position ds la table ;o) .... puisque tu as acce à toute les variables d UI ;o)

GodConan ;o)
Messages postés
54
Date d'inscription
dimanche 12 septembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

merci messieurs


j'ai réussi à me dépatouiller avec tout celà

cependant il me reste 2 petits soucis


_ le premier, j'utilise un look and feel et lorsque je survole la
JTable il me surligne les lignes, le fait de bloquer la JTable comme je
l'avais fait ne provoquais pas le surlignement des lignes alors qu'avec
le code donné par theguitou il me le fait quand même, mais je ne vais
quand même pas réécrire le look and feel, ce n'est pas de mon niveau !

_ second problème, dans ma classe j'ai donc instancié la JTable de cette manière :
public    
JTable    maTable    
=     new JTable(new AccordPianoJTable);

au lieu de
public    
JTable    maTable    
=     new JTable(11, 7);

comme je l'avais fait avant

or plus loin dans mon code je rempli la JTable de cette manière
this.maTable.setValueAt        (..., ..., ...);

cependant maintenant ca ne fonctionne plus avec la nouvelle méthode

que faut-il modifier dans les méthodes redéfinies de AccordPianoJTable
pour pouvoir inscrire le texte voulu dans les cellules de ma JTable ?



don't cross the crocked step
Messages postés
75
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009
32
probleme 1 : Tu peut toujours changer les couleurs (et mettre du blanc)

 
void
setSelectionBackground(Color selectionBackground)


          Sets the background color for selected cells.

 
void
setSelectionForeground(Color selectionForeground)


          Sets the foreground color for selected cells.

import awt.*;

maTable.setSelectionBackground(Color.WHITE) ...

Problème 2 : peut être this.maTable.getModel().setValueAt (..., ..., ...) si tu as fais un TableModel
Messages postés
54
Date d'inscription
dimanche 12 septembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

problème 1 ok, mais problème 2 toujours pas d'affichage



don't cross the crocked step
Messages postés
75
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009
32
Ca va etre difficile d'aller plus loin sans voir un peu ton code, notament ton AccordPianoJTable ...
Messages postés
54
Date d'inscription
dimanche 12 septembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

public class AccordPianoJTable extends         AbstractTableModel

           
           
           
           
    implements TableModel

{

    public         void
           
addTableModelListener       
    (TableModelListener arg0) {}

   

    public        int
           
    getColumnCount       
            ()

    {

        return 7;

    }

   

    public         String
           
getColumnName           
        (int arg0)

    {

        return null;

    }

   

    public         int
           
    getRowCount       
           
        ()

    {

        return 11;

    }

   

    public         Object
        getValueAt   
           
           
    (int arg0, int arg1)

    {

        return null;

    }

   

    public         boolean
        isCellEditable   
           
            (int arg0, int
arg1)

    {

        return false;

    }

   

    public         void
           
removeTableModelListener       
(TableModelListener arg0)    {}

   

    public         void
           
setValueAt           
           
        (Object arg0, int arg1, int
arg2){}

}



don't cross the crocked step
Messages postés
75
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009
32
Tu n'aurais pas oublié sa :
private String[] columnNames = ...
private Object[][] data = ...

??
Messages postés
54
Date d'inscription
dimanche 12 septembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

je ne  l'ai pas mis car je ne vois pas quoi en faire vu que ma
Table je la rempli après en faisant mes .setValueAt(..........) dans
une boucle de BDD
try

        {

            métaOrdre = resultat.getMetaData ();

            while (resultat.next())

            {

           
    int       
    ligne       
    =        0;

           
    String       
texte        =   
    "<html>";

           
    for (int colonne = 1; colonne <=
métaOrdre.getColumnCount (); colonne++)

                {

                    switch (colonne)

                    {

           
            case
1    :    texte    
+=    "" + resultat.getString(colonne) +
"
";       
           
           
    break;

           
            case
2    :    texte    
+=    resultat.getString(colonne) +
"
";           
           
           
           
        break;

           
            case
3    :    texte    
+=    resultat.getString(colonne) + "
";           
           
           
           
           
    break;

           
            case
4    :    texte    
+=    resultat.getString(colonne) +
"
";           
           
           
           
        break;

           
            case
5    :    texte    
+=   
ChainesDeCaractères.separeTelephone(resultat.getString(colonne));   
break;

           
           
case     6    :   
ligne        =   
   
Integer.parseInt(resultat.getString(colonne).substring(0, 2)) -
8;           
    break;

                    }

                }

           
    this.maTable.setValueAt   
    (texte, ligne, colonneJTable);

            }

        }

        catch (SQLException aSQLE)

        {

           
JOptionPane.showMessageDialog    (null, "Echec lors de
la lecture des résultats\n" + aSQLE.getMessage(), "Erreur",
JOptionPane.ERROR_MESSAGE);

        }

don't cross the crocked step
Messages postés
75
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009
32
Ah et puis j'ai lu un peu vite :

Tu réimplémente des méthodes ... pour qu'elle ne fasse rien ?!?!

Efface tous sauf isCellEditable et en particulier :

public Object getValueAt (int arg0, int arg1)
{
  return null;
}
public void removeTableModelListener (TableModelListener arg0)    {}
public void setValueAt (Object arg0, int arg1, int arg2){}

et rajoute :

private String [] columnNames = {"colonne 1", ..., "colonne 7"};
private Object [][] data = new Object[11][7];