IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

deux proprietés pour mes lignes? c'est possible


Sujet :

Composants Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 113
    Points : 42
    Points
    42
    Par défaut deux proprietés pour mes lignes? c'est possible
    salut tout le monde,

    je veux créer une JTable avec des lignes de couleur alternée et quand je selectionne une ligne, le background devient gris et le forgrounde devient rouge, est ce que cela est possible.

    j'ai pas pu faire les deux en meme temps, soit mes ligne sont alterné soit quand je selection une ligne, elle se transforme comme decrit ci dessus.

    est ce que je peux avoir les deux proprieté dans une meme JTable.

    voici ma classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    public class ProprietesFenetre implements TableCellRenderer {
    	public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
    	public Component getTableCellRendererComponent(JTable arg0, Object value,
    			boolean isSelected, boolean hasFocus, int ligne, int colonne) {
    		// TODO Auto-generated method stub
    		Component renderer=DEFAULT_RENDERER.getTableCellRendererComponent(arg0, value, isSelected, hasFocus, ligne, colonne);
    		Color forground, background;	
    		if(isSelected){
    			forground=Color.RED;
    			background=Color.GRAY;
    		}
    		else{
    			forground=Color.BLUE;
    			background=Color.WHITE;
    		}
     
    		renderer.setForeground(forground);
    	    renderer.setBackground(background);
     
    	    if ((ligne & 1) == 0) {
     
    	        renderer.setBackground(Color.white);
     
    	        } else {
     
    	          renderer.setBackground(Color.lightGray);
     
    	        }
    		return renderer;
    	}
     
    	/**public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                          boolean hasFocus, int row, int column) {
                        JButton editor = new JButton();
                        if (value != null)
                            editor.setText(value.toString());
                        editor.setBackground((row % 2 == 0) ? Color.white : Color.cyan);
                        return editor;
                      }**/
     
    }

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    j'ai resolu à 60 % mon probleme:
    maintenant mes ligne sont alternées (blanc et jaune).

    quand je selectionne une ligne, le forground deveient en rouge mais le Background ne se change pas. je sais pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public Component getTableCellRendererComponent(JTable arg0, Object value,
    			boolean isSelected, boolean hasFocus, int ligne, int colonne) {
    		// TODO Auto-generated method stub
    		Component renderer=DEFAULT_RENDERER.getTableCellRendererComponent(arg0, value, isSelected, hasFocus, ligne, colonne);
    		Color forground, background;	
     
    		if(isSelected){
    			forground=Color.RED;
    			background=Color.GRAY;
    		}
    		else{
    			forground=Color.BLUE;
    			background=Color.WHITE;
    		}
     
     
     
    	    if ((ligne & 1) == 0) {
    	    	background=Color.WHITE;
    	        //renderer.setBackground(Color.white);
     
    	        } else {
    	        	background=Color.YELLOW;
    	          //renderer.setBackground(Color.YELLOW);
     
    	        }
    	    renderer.setForeground(forground);
    	    renderer.setBackground(background);
    		return renderer;
    	}

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Points : 338
    Points
    338
    Par défaut
    Citation Envoyé par sitws Voir le message
    je sais pas pourquoi
    Parce que tu écrases la valeur de "background" que ta ligne soit sélectionnée ou non.
    C'est un simple problème d'algorithme

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    vraiment j'ai pas fait attention.

    alors je peux pas faire les deux en meme temps.?

  5. #5
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    mettez un point d'arrêt dans votre code, et observez son comportement en mode débogage.
    La solution vous viendra naturellement

    @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    j'ai une classe Tache(nom, id, durée, type)
    ma table contient les colonnes(nom, id, durée)
    chaque ligne de ma Table est composé d'un objet Tache
    j'ai deux bouton(tache et rubrique), quand je clique sur le bouton Tache, j'ajoute une ligne dans ma table avec une tache qui a comme type"Tache" et quand je clique sur le bouton rubrique j'ajoute une ligne dans ma table qui contient un objet Tache avec la proprieté "Rubrique".
    Mon soucis est comment je dois faire pour colorrer seuelement les lignes qui ont comme type "rubrique"?

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 113
    Points : 42
    Points
    42
    Par défaut
    j'ai reussi à 30%.
    maaitenant toutes les lignes de ma table dont le champ "nom" comence par un "R" sont colorer par le jaune.

    mais si je modifie le nom(ma cellule est editable), la couleur disprait

    que dois je faire?

    voici ma classe Tache:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    public class Tache {
    	String  nom;
    	String Durée;
    	int ID;
    	String Type;
    	public Tache( String nom, int ID,String durée, String Type ) {
    		this.ID=ID;
    		this.nom=nom;	
    		this.Durée=durée;
    		this.Type=Type;
    		// TODO Auto-generated constructor stub
    	}
     
    	public String getType() {
    		return Type;
    	}
     
    	public void setType(String type) {
    		Type = type;
    	}
     
    	public Tache(){
    		nom="";
    		Durée="";
    	}
    	public int getID() {
    		return ID;
    	}
    	public void setID(int id) {
    		ID = id;
    	}
    	public String getNom() {
    		return nom;
    	}
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
    	public String getDurée() {
    		return Durée;
    	}
    	public void setDurée(String durée) {
    		Durée = durée;
    	}
     
    }
    le modele de ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    package exemple1;
     
    import java.awt.Color;
    import java.util.Vector;
     
    import javax.swing.table.AbstractTableModel;
     
    public class ModeleTable extends AbstractTableModel{
     
     
    	private String[] colonnes={"Nom", "ID", "Durée"};
    	Vector<Tache> enreg=new Vector<Tache>();
     
    	int ID=1;
     
    	public int getColumnCount() {
    		// TODO Auto-generated method stub
    		return colonnes.length;
    	}
     
    	public String getColumnName(int columnIndex) {
    		return colonnes[columnIndex];
    		}
     
    	@Override
    	public int getRowCount() {
    		// TODO Auto-generated method stub
    		return enreg.size();
    	}
     
    	public boolean isCellEditable(int ligne, int colonne){
    		if(colonne==1)
    			return false;
    		else 
    			return true;		
    	}
     
    	@Override
    	public Object getValueAt(int rowIndex, int columnIndex) {
     
    		Tache t=(Tache)enreg.get(rowIndex);
    		switch(columnIndex){
    		case 0:
    		return t.getNom();
    		case 1:
    		return t.getID();
    		case 2:
    		return t.getDurée();
    		/**case 3:
                    return  t.getType();**/
    		default:
    		return null; //Ne devrait jamais arriver
    		}		
    	}
     
    	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    		if(aValue != null){
    			Tache p = (Tache)enreg.get(rowIndex);
    			switch(columnIndex){
    			case 0:
    				p.setNom((String)aValue);
    				break;
    			case 2:
    				p.setDurée((String)aValue);
    				break;
    			/**case 3:
                                    p.setType((String) aValue);
                                    break;**/
    			}			
    			fireTableCellUpdated(rowIndex, columnIndex);
    	}
    	}
     
    	public boolean ContientLigneVide(){
    		if(enreg.size()==0) return false;
    		Tache t=(Tache)enreg.get(enreg.size()-1);
    		if (t.getNom().equals("")) 
    			return true;
    			else 
    				return false;
    			}
     
    	public void addTache(){
    		enreg.add(new Tache("-----tache"+ID,ID++,"1","Tache"));	
    		fireTableRowsInserted(enreg.size() -1, enreg.size() -1);
    	}
     
    	public void addRubrique(){
    		enreg.add(new Tache("Rubrique"+ID,ID++,"1","Rubrique"));
    		fireTableRowsInserted(enreg.size() -1, enreg.size() -1);
    	}
     
    	public void DeleteTache(int IndexLigne){
    		enreg.remove(IndexLigne);
    		fireTableRowsDeleted(IndexLigne, IndexLigne);
    	}
     
    	public void AfficherTache(){
    		for(int i=0; i<enreg.size();i++)
    			System.out.println(((Tache)enreg.get(i)).getID()+"|"+((Tache)enreg.get(i)).getNom()+"|"+((Tache)enreg.get(i)).getDurée());
    	}
     
    	public void addTacheVide(){
    		Tache t=new Tache();
    		t.setID(ID++);
    		enreg.add(t);
    		fireTableRowsInserted(enreg.size() -1, enreg.size() -1);
    	}
    }
    et les proprieté de mes cellules:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class PropCellule extends DefaultTableCellRenderer {
     
    	public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
    	public Component getTableCellRendererComponent(JTable jtable, Object value,
    			boolean isSelected, boolean hasFocus, int ligne, int colonne) {
    		// TODO Auto-generated method stub
    		super.getTableCellRendererComponent(jtable, value, isSelected,
    	               hasFocus, ligne, colonne);
     
            int colIndex = jtable.getColumnModel().getColumnIndex("Nom");
     
            // only color the row if it is unselected
            if (!isSelected) {
               if (jtable.getValueAt(ligne, colIndex).toString().startsWith("R")) {
                  setBackground(Color.YELLOW);
               } else {
                  setBackground(jtable.getBackground());
               }
            }
     
     
            return this;
     
     
    	}
    }

  8. #8
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    pour le problème de la cellule qui ne retrouve pas sa couleur lorsque vous modifiez le nom (la cellule est éditable), essayez le test suivant:

    * Modifiez le nom dans une cellule qui est jaune.
    * D'après ce que vous dites, la couleur jaune ne revient pas -> faites passer une autre application devent votre JTable, par exemple prenez la calculatrice et promenez-la au-dessus de la cellule qui a perdu sa couleur.
    * Si le jaune est redessiné lorsque la cellule n'est plus cachée par la calculatrice, cela signifie que vous avez oublié de demander un rafraichissement graphique de la cellule lorsque le nom est entré.

    * Vous devriez normalement indiquer à votre JTable que le contenu d'une cellule a changé grâce à monModeleTable.fireTableDataChanged().

    @ bientôt...
    @ bientôt...

    Salut & @+ sur 3W!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher un TpopupMenu avec de large ligne, c'est possible ?
    Par pepito62 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 20/04/2009, 10h10
  2. Réponses: 4
    Dernier message: 19/11/2008, 21h25
  3. Un filtre pour plusieurs TCD - C'est possible ?
    Par taisherg dans le forum Excel
    Réponses: 11
    Dernier message: 16/10/2007, 14h55
  4. Jlist et tooltip: un tooltip par ligne c'est possible?
    Par nicofromChina dans le forum Composants
    Réponses: 6
    Dernier message: 29/01/2007, 17h40
  5. tableau qui a deux couleur pour les lignes <td>
    Par abdess6600 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 23/05/2006, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo