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

AWT/Swing Java Discussion :

CellRenderer utilisation processeur


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 201
    Points : 179
    Points
    179
    Par défaut CellRenderer utilisation processeur
    Bonjour,

    J'ai un problème avec un tableCellRenderer.
    En effet, dès que j'ouvre la table mon processeur monte en utilisation très fortement. J'ai vu que ca venait d'un appel continue à la méthode getTableCellRendererComponent .

    Voici le code.
    Si quelqu'un peut m'aider.

    Merci d'avance.

    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
     
     
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.FontMetrics;
    import java.awt.event.MouseEvent;
    import java.sql.Date;
    import java.util.Enumeration;
    import java.util.EventObject;
    import java.util.Vector;
     
    import javax.swing.JTable;
    import javax.swing.JTextArea;
    import javax.swing.event.CellEditorListener;
    import javax.swing.event.ChangeEvent;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableColumn;
     
    public class MyTextAreaCell extends JTextArea implements TableCellRenderer,
    		TableCellEditor {
     
    	public MyTextAreaCell() {
    		super();
    	}
     
    	public Component getTableCellRendererComponent(JTable table, Object value,
    			boolean isSelected, boolean hasFocus, int row, int column) {
    		if (isSelected) {
    			setBackground(Color.BLUE);
    			setForeground(Color.WHITE);
    		} else {
    			if ((row % 2) == 0) {
    				setBackground(Color.YELLOW);
    				setForeground(Color.BLACK);
    			} else {
    				setBackground(Color.WHITE);
    				setForeground(Color.BLACK);
    			}
    		}
    		setAlignmentX(JTextArea.CENTER_ALIGNMENT);
    		setAlignmentY(JTextArea.CENTER_ALIGNMENT);
    		setAutoscrolls(false);
    		setLineWrap(true);
    		setWrapStyleWord(true);
    		setText((value.toString()));
    		if (value.getClass().equals(d.getClass())) {
    			setText(dc.getDateFR(value.toString()));
    		} else {
    			setText(value.toString());
    		}
    		table.setRowHeight(row, getHeight(this, table, value.toString(), row,
    				column));
    		TableColumn col = null;
    		for (int i = 0; i < table.getColumnCount(); i++) {
    		   col = table.getColumnModel().getColumn(i);
    		   System.out.println(col.getWidth());
    		   col.sizeWidthToFit();
    		}
    		return this;
    	}
     
    	public Component getTableCellEditorComponent(JTable table, Object value,
    			boolean isSelected, int row, int column) {
    		savedValue = value;
    		setAlignmentX(JTextArea.CENTER_ALIGNMENT);
    		setAlignmentY(JTextArea.CENTER_ALIGNMENT);
    		setAutoscrolls(true);
    		setLineWrap(true);
    		setWrapStyleWord(true);
    		setText((value.toString()));
    		if (value.getClass().equals(d.getClass())) {
    			setText(dc.getDateFR(value.toString()));
    		} else {
    			setText(value.toString());
    		}
    		return this;
    	}
     
    	private int getHeight(JTextArea textArea, JTable table, String text,
    			int row, int column) {
    		FontMetrics fm = getFontMetrics(textArea.getFont());
    		int numberOfTextRows = 2;
    		int numberOfTextRows_IncludingNewlines = 0;
    		int textWidth = 0;
    		int columnWidth = 0;
    		if (fm != null) {
    			textWidth = fm.stringWidth(text);
    		}
    		if (textWidth > 0) {
    			TableColumn tableColumn = table.getColumnModel().getColumn(column);
    			columnWidth = tableColumn.getWidth()
    					- (textArea.getMargin().left + textArea.getMargin().right);
    			numberOfTextRows = (textWidth / columnWidth + 1);
    			if (text.indexOf('\n') > -1) {
    				for (int index = 0; index < text.length();) {
    					try {
    						int index_1 = text.indexOf('\n', index);
    						int index_2 = text.indexOf('\n', index + 1);
    						String line = text.substring(index_1, index_2);
    						textWidth = fm.stringWidth(line);
    						numberOfTextRows_IncludingNewlines += ((textWidth / columnWidth) + 1);
    						index = index_2;
    					} catch (StringIndexOutOfBoundsException ex) {
    						break;
    					}
    				}
    				numberOfTextRows = Math.max(numberOfTextRows,
    						numberOfTextRows_IncludingNewlines) + 2;
    			}
    		}
    		int rowHeight = fm.getHeight() * (numberOfTextRows + 1);
    		if (rowHeight > table.getRowHeight(row)) {
    			return rowHeight;
    		}
    		return table.getRowHeight(row);
    	}
     
    	public boolean isCellEditable(EventObject anEvent) {
    		if (anEvent instanceof MouseEvent) {
    			MouseEvent evt = (MouseEvent) anEvent;
    			if (evt.getClickCount() == 2) {
    				return true;
    			}
    		}
    		return false;
    	}
     
    	public boolean shouldSelectCell(EventObject anEvent) {
    		return true;
    	}
     
    	public void addCellEditorListener(CellEditorListener l) {
    		listeners.addElement(l);
    	}
     
    	public void removeCellEditorListener(CellEditorListener l) {
    		listeners.removeElement(l);
    	}
     
    	public void cancelCellEditing() {
    		setText(savedValue.toString()); // revert to last saved value
    		ChangeEvent ce = new ChangeEvent(this);
    		Vector copy = (Vector) listeners.clone();
    		Enumeration e = copy.elements();
    		while (e.hasMoreElements()) {
    			CellEditorListener l = (CellEditorListener) e.nextElement();
    			l.editingCanceled(ce);
    		}
    	}
     
    	public boolean stopCellEditing() {
    		ChangeEvent ce = new ChangeEvent(this);
    		Vector copy = (Vector) listeners.clone();
    		Enumeration e = copy.elements();
    		while (e.hasMoreElements()) {
    			CellEditorListener l = (CellEditorListener) e.nextElement();
    			l.editingStopped(ce);
    		}
    		return true;
    	}
     
    	public Object getCellEditorValue() {
    		return new String(getText());
    	}
     
    	Date_convert dc = new Date_convert();
     
    	Date d = new Date(0);
     
    	private transient Vector listeners = new Vector();
     
    	private Object savedValue;
     
    }

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 201
    Points : 179
    Points
    179
    Par défaut
    D'après un petit test que je viens de faire

    Il se produit plus de 150 000 appel à cette méthode par minute, d'où le problème de processeur.

    Je vois pas par quoi est appelé cette méthode

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 201
    Points : 179
    Points
    179
    Par défaut
    Je viens de trouver que c'était la méthode getHeight qui appelait la méthode getTableCellRendererComponent

    Je vois pas comment modifier cette méthode sans perdre les données essentielles car c'est elle qui me permet de calculer la hauteur de chaque ligne de la table.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Relance
    Je me permet de relancer cette discussion car j'ai le même problème sur beaucoup de mes tableaux Swing. Est-ce qu'un pro du Swing sait pourquoi le TableCellRenderer emploi une grande parti du CPU et surtout comment coder correctement un TableCellRenderer ?

    Merci !!

Discussions similaires

  1. Utilisation processeur / ActiveX / JavaScript
    Par Kanithael dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/09/2009, 12h02
  2. Utilisation processeur en multi proc
    Par la_praline dans le forum C#
    Réponses: 1
    Dernier message: 26/07/2009, 13h11
  3. Affichage pourcentage utilisation processeur ram
    Par darkman13130 dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/06/2008, 14h25
  4. Problème d'utilisation processeur
    Par Debhian dans le forum SDL
    Réponses: 3
    Dernier message: 20/04/2007, 16h53
  5. OpenGLUT et utilisation processeur
    Par rulianf dans le forum GLUT
    Réponses: 1
    Dernier message: 21/11/2005, 13h47

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