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 :

[JTable] affichage des cellules à la manière d'un JTextArea


Sujet :

Composants Java

  1. #1
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut [JTable] affichage des cellules à la manière d'un JTextArea
    Bonjour a tous,
    voila mon probleme :
    j'essaie d'afficher une jtable construite a partir d'un tableau d'étapes dont la structure est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int num;//numero d'étape
    String desc;//description de l'étape
    String res;//resultat attendu
    et ils y a plusieurs pbs que je n'arrive pas a resoudre :
    1/ il faudrait que la 1° colonne et les 2 autres n'aient pas la meme largeur
    2/ les champs desc et res sont enregistré avec plusieurs lignes, mais l'affichage dans la cellule ne se fait que sur une seule ligne au centre de la cellule
    3/ je n'arrive pas a faire de scrollbar sur les cellules (j'arrive à le faire apparaitre, mais je ne peut pas l'utiliser, et si je double clique sur la cellule, le text apparait, toujours sur une seule ligne et dans une cellule élargie)

    donc en fait ce que je voudrais savoir c'est d'une part comment redimensionner une colonne et d'autre part comment faire pour qu'une cellule se comporte comme un JTextArea.

    pour info, voici le code de mon cellrenderer :
    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
     
    public class MyCellRenderer extends DefaultTableCellRenderer {
     
        public MyCellRenderer() { 
            super(); 
         } 
     
         public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int col){
     
             //System.err.println("value = "+value.toString());
             Component c = super.getTableCellRendererComponent( table, value,isSelected,hasFocus,row,col);
             //System.out.println(value+" hf :"+hasFocus+" is : "+isSelected);
             if(!isSelected){ //on grise une ligne sur 2 par soucis de visibilité
                if(row%2 != 0) 
                    c.setBackground(Color.LIGHT_GRAY);
                else 
                    c.setBackground(Color.WHITE); 
             } 
             if(col!=0){
                 c.setSize(new Dimension(300, 50));
             }
             else{
                 c.setSize(new Dimension(30, 50)); 
             }
             /*c.setFocusable(true);
             JScrollPane jsp=new JScrollPane(c,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED ,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);  //permet l'affichage de scrollbar dans une cellule*/
     
             return c; 
          } 
     
     
    }
    merci d'avance pour vos idées

  2. #2
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    bon j'ai reussi à resizer mes colonne en faisant ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     table.getColumnModel().getColumn(numcol).setPreferredWidth(50);
    lorsque je defini ma table.
    par contre pour les questions 2 et 3 je vois toujours pas. mes champs desc et res sont bien affichées avec des retours a la ligne dans un JTextArea, mais pas dans mes cellules

  3. #3
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    bon j'ai finalement trouvé, il suffisait de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(col!=0){ 
                this.setHorizontalAlignment(LEFT);
                 this.setVerticalAlignment(TOP);
                c=new JTextArea(value.toString());
             }
    ct tout con en fait
    par contre, quelqu'un saurait il comment je peux modifier cette cellule ou bouger le scrollbar, car en fait quand je ne fait qu'un seul click sur la cellule, il ne se passe rien, et quand je fais un double click, tout le texte revient sur une seule ligne et la cellule s'agrandit (comme lorsqu'on modifie une cellule sous excell par exemple). or il faut que je puisse ajouter des lignes dans ma cellule sans que l'affichage ne soit perturbé (je sais pas si je suis tres clair mais je sais pas trop comment expliquer cela autrement)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    http://java.sun.com/docs/books/tutor...nts/table.html

    Sur ce site ils expliquent comment mettre des JComboBox dans les cellule.
    Peut etre peux tu t en inspirer pour y mettre des JTextArea.
    Je n ai pas vraiment le temps de faire des test pour voir si ca marche, mais c une piste.

    Bonne chance
    ++
    Mess with the best, die like the rest!

  5. #5
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    merci je vais essayer

  6. #6
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    bon ben ca marche pas
    ils utilisent un defaultCellEditor avec le combobox en parametre, ce que je ne peux pas faire avec un JtextArea, meme en redefinissant une classe qui herite de defaultCellEditor .
    merci quand meme, si quelqu'un a une autre idée je suis preneur

  7. #7
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    une autre question : j'ai fait pour que ma classe contenant la jtable implment mouselistener, pour voir si je ne pouvais pas m'en sortir comme ca, cependant le comportement est assez bizarre :
    les fonctions mouseExited et mouseEntered sont bien declenchées quand je passe la souris dans le panel contenant la JTable, mais pas la fonction mouseClicked, et la franchement je vois pas pourquoi : : :

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Sur quel objet as tu mis le MouseListener ?
    Mess with the best, die like the rest!

  9. #9
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    ben ca en fait je viens de trouver, je l'avais mis sur mon panel et ca marchait pas, maintenant je l'ai mis sur ma table et ca marche, sauf que j'ai l'impression qu'il comprend le doubleclick comme un simple click : quand je fait un doubleclick sur une cellule, j'obtient cet evenement la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.awt.event.MouseEvent[MOUSE_CLICKED,(125,197),button=1,modifiers=Button1,clickCount=1] on....(des info sur ma table)
    soit la meme chose que pour un simple click

    autre chose : j'essaie de passer par mon propre TableModel pour voir si mon probleme ne peut pas se resoudre comme ca
    seulement je n'obtiens plus d'evenement lorsque je modifie ma table (la fonction tablechanged n'est plus lancée)
    j'ai essayé de mettre mon TableModellistener sur ma table et sur le modele lui meme c la meme chose. c bien mon TableModel qui doit implementer TableModelListener,non?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    pour les double-clic normalement comme ca il n'y a pas de raison que ca ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void mouseClicked (MouseEvent e) {
       if (e.getClickCount() == 2) {
          //ton code
       }
    }
    Quant à ton TableModelListener je pense savoir ce qui ne va pas.
    Quand tu as défini ton TableModel, tu as du surcharger la méthode setValueAt(value,row,col)
    A la fin de cette méthode tu dois mettre un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fireTableCellUpdated(row, col);
    pour prévenir les listener qu'un changement a été effectué dans la table.
    Mess with the best, die like the rest!

  11. #11
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    dsl ca marche tjs pas
    quand je met le e.getClickCount() == 2, il ne detecte plus mon double click, ce qui correspond a l'affichage de mon evenement
    et sinon pour le listener, j'vais deja essayé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fireTableChanged (new TableModelEvent (this, row, row, col));
    fireTableDataChanged();
    fireTableCellUpdated(row, col);
    et aucun ne fonctionne, ma fonction tableChanged n'est jamais appelée

    [edit] alors en fait c normal vu que mon programme ne rentre pas dans la fonction setValueAt.
    pourquoi ca j'en sais rien [/edit]

  12. #12
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    ah quel con!
    bon ca marche, j'avais mal compris comment creer ma jtable avec un table model perso
    par contre, mon pb maintenant c'est que la fonction getvalue renvoie la valeur d'une cellule sous la forme d'un Object => pas de retour chariot, et tout mon texte se retrouve sur une seule ligne.
    pourtant, dans mon cellrenderer j'ai bien specifié d'afficher mes cellules sous forme de JTextArea, ce qu'il fait a la creation, avec meme les scrollbar.mais la j'ai un 2°soucis : les scrollbars ne sont pas utilisable car quand je fais un simple clique sur la cellule il ne se passe rien et quand j'en fait 2 je passe en mode edition de la cellule ou tt se met sur une seule ligne
    y'a-t'il une option a specifier sur ma jtable pour lui dire d'accepter que j'utilise mes scrollbar? et comment puis je recuperer les retour chariots dans un Object?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Je t ai fais un petit exemple qui marche mis a par la taille de la cellule que je n'ai pas redimensionnée (je n avais pas envi de me prendre la tete avec des probleme de dimension de cellule, je voulais surtout mettre en avant l'utilisation des CellEditor et des TableCellRenderer)

    Maintenant à toi d'essayer de l'adapter à ton cas
    Bonne chance
    a+

    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
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    import javax.swing.*;
    import javax.swing.table.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class TableRenderDemo extends JPanel {
     
    	public TableRenderDemo() {
    		super(new GridLayout(1,0));
     
    		JTable table = new JTable(new MyTableModel());
    		table.setPreferredScrollableViewportSize(new Dimension(500, 70));
     
    		//Create the scroll pane and add the table to it.
    		JScrollPane scrollPane = new JScrollPane(table);
     
    		//Set up column sizes.
    		initColumnSizes(table);
     
    		//Fiddle with the Sport column's cell editors/renderers.
    		setUpSportColumn(table, table.getColumnModel().getColumn(2));
    		table.getColumnModel().getColumn(1).setCellEditor(new MyCellEditor());
    		table.getColumnModel().getColumn(1).setCellRenderer(new MyCellRenderer());
    		//Add the scroll pane to this panel.
    		add(scrollPane);
    	}
     
    	/*
    	 * This method picks good column sizes.
    	 * If all column heads are wider than the column's cells'
    	 * contents, then you can just use column.sizeWidthToFit().
    	 */
    	private void initColumnSizes(JTable table) {
    		MyTableModel model = (MyTableModel)table.getModel();
    		TableColumn column = null;
    		Component comp = null;
    		int headerWidth = 0;
    		int cellWidth = 0;
    		Object[] longValues = model.longValues;
    		TableCellRenderer headerRenderer =
    			table.getTableHeader().getDefaultRenderer();
     
    		for (int i = 0; i < 5; i++) {
    			column = table.getColumnModel().getColumn(i);
     
    			comp = headerRenderer.getTableCellRendererComponent(
    					null, column.getHeaderValue(),
    					false, false, 0, 0);
    			headerWidth = comp.getPreferredSize().width;
     
    			comp = table.getDefaultRenderer(model.getColumnClass(i)).
    			getTableCellRendererComponent(
    					table, longValues[i],
    					false, false, 0, i);
    			cellWidth = comp.getPreferredSize().width;
     
    			//XXX: Before Swing 1.1 Beta 2, use setMinWidth instead.
    			column.setPreferredWidth(Math.max(headerWidth, cellWidth));
    		}
    	}
     
    	public void setUpSportColumn(JTable table,
    			TableColumn sportColumn) {
    		//Set up the editor for the sport cells.
    		JComboBox comboBox = new JComboBox();
    		comboBox.addItem("Snowboarding");
    		comboBox.addItem("Rowing");
    		comboBox.addItem("Knitting");
    		comboBox.addItem("Speed reading");
    		comboBox.addItem("Pool");
    		comboBox.addItem("None of the above");
    		sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
     
    		//Set up tool tips for the sport cells.
    		DefaultTableCellRenderer renderer =
    			new DefaultTableCellRenderer();
    		renderer.setToolTipText("Click for combo box");
    		sportColumn.setCellRenderer(renderer);
    	}
     
    	class MyTableModel extends AbstractTableModel {
    		private String[] columnNames = {"First Name",
    				"Last Name",
    				"Sport",
    				"# of Years",
    		"Vegetarian"};
    		private Object[][] data = {{"Mary", new JTextArea() ,"Snowboarding", new Integer(5), new Boolean(false)}};
     
    		public final Object[] longValues = {"Sharon", "Campione",
    				"None of the above",
    				new Integer(20), Boolean.TRUE};
     
    		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];
    		}
     
    		/*
    		 * JTable uses this method to determine the default renderer/
    		 * editor for each cell.  If we didn't implement this method,
    		 * then the last column would contain text ("true"/"false"),
    		 * rather than a check box.
    		 */
    		public Class getColumnClass(int c) {
    			return getValueAt(0, c).getClass();
    		}
     
    		/*
    		 * Don't need to implement this method unless your table's
    		 * editable.
    		 */
    		public boolean isCellEditable(int row, int col) {
    			//Note that the data/cell address is constant,
    			//no matter where the cell appears onscreen.
    			if (col < 1) {
    				return false;
    			} else {
    				return true;
    			}
    		}
     
    		/*
    		 * Don't need to implement this method unless your table's
    		 * data can change.
    		 */
    		public void setValueAt(Object value, int row, int col) {
    			data[row][col] = value;
    			fireTableCellUpdated(row, col);
    		}
    	}
     
     
    	class MyCellEditor extends AbstractCellEditor implements TableCellEditor {
    		JTextArea val;
     
    		public MyCellEditor () {
    			super();
    		}
     
    		public Object getCellEditorValue() {
    			return val;
    		}
     
    		public Component getTableCellEditorComponent(JTable table, Object value, 
    				boolean isSelected, int row, int column) {
     
    			JTextArea jta = (JTextArea)value;
    			val = jta;
     
    			JScrollPane jsp = new JScrollPane(jta);
     
    			return jsp;
    		}
    	}
     
    	class MyCellRenderer extends JTextArea
        implements TableCellRenderer {
     
    	    public MyCellRenderer() {
    	        setOpaque(true); //MUST do this for background to show up.
    	    }
     
    	    public Component getTableCellRendererComponent(
    	                            JTable table, Object color,
    	                            boolean isSelected, boolean hasFocus,
    	                            int row, int column) {
    	        JScrollPane jsp = new JScrollPane((JTextArea)table.getModel().getValueAt(row,column));
    	        return jsp;
    	    }
    	}
     
    	/**
             * Create the GUI and show it.  For thread safety,
             * this method should be invoked from the
             * event-dispatching thread.
             */
    	private static void createAndShowGUI() {
    		//Make sure we have nice window decorations.
    		JFrame.setDefaultLookAndFeelDecorated(true);
     
    		//Create and set up the window.
    		JFrame frame = new JFrame("TableRenderDemo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		//Create and set up the content pane.
    		TableRenderDemo newContentPane = new TableRenderDemo();
    		newContentPane.setOpaque(true); //content panes must be opaque
    		frame.setContentPane(newContentPane);
     
    		//Display the window.
    		frame.pack();
    		frame.setVisible(true);
    	}
     
    	public static void main(String[] args) {
    		//Schedule a job for the event-dispatching thread:
    		//creating and showing this application's GUI.
    		javax.swing.SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				createAndShowGUI();
    			}
    		});
    	}
    }
    Mess with the best, die like the rest!

  14. #14
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    merci beaucoup

  15. #15
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    j'ai modifié mon code pour qu'il soit a peu pres comme celui que tu m'as donné (en fait le seul truc qui change c que mes JTextArea ne sont pas vide, je les initialise avec une valeur prise dans un fichier texte)
    seulement j'ai un probleme dans le cellrenderer à l'execution de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JScrollPane jsp = new JScrollPane((JTextArea)table.getModel().getValueAt(row,column));
    j'obtient un clascastexception
    pourtant ton code passe tres bien
    le seul moyen que j'ai trouvé pour passer ce cap est de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     JScrollPane jsp = new JScrollPane( new JTextArea(table.getModel().getValueAt(row,column).toString()));
    mais une fois la modification effectuée (quand je clique sur une autre case) j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.swing.JTextArea[,0,-109,658x240,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=null,alignmentY=null,border=javax.swing.plaf.basic.BasicBorders$MarginBorder@1bc4ec8,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],disabledTextColor=javax.swing.plaf.ColorUIResource[r=153,g=153,b=153],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],selectionColor=javax.swing.plaf.ColorUIResource[r=204,g=204,b=255],colums=0,columWidth=0,rows=0,rowHeight=0,word=false,wrap=false]
    a la place du texte que j'ai entré
    est-ce normal? comment puis-je eviter cela?

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Le CellEditor et le TableCellRenderer s'applique sur une colonne, celle ou tu as mis tes JTextArea.
    Dans mon exemple c'est la deuxieme colonne d'où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    table.getColumnModel().getColumn(1).setCellEditor(new MyCellEditor());
    table.getColumnModel().getColumn(1).setCellRenderer(new MyCellRenderer());
    Il faut donc que tu fasse attention de les appliquer à la bonne colonne.
    C'est d'ailleurs je pense la source de tes deux erreurs.
    Mess with the best, die like the rest!

  17. #17
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    ben c'est ce que j'ai fait mais ca marche pas
    il me donne toujours un class cast error, ou alors (si je passe fait new JTextArea au lieu de (JtextArea)) j'ai le texte que je t'ai montré dans mon dernier message
    je comprend vraiment pas pourquoi

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    essai d afficher le type que tu as dans ta table comme ca

    System.out.println(table.getModel().getValueAt(row,column).getClass());

    Mais si tu as bien appliqué le renderer sur la colonne ou tu as tes JTextArea dans le Model de la table il n y a pas de raison que tu ai un ClassCastException.
    Mess with the best, die like the rest!

  19. #19
    HoB
    HoB est déconnecté
    Membre du Club
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2004
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    ouais ca venait du fait que j'avais laissé un toString dans mon setValueAt et je l'avais pas vu
    merci beaucoup en tt cas

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

Discussions similaires

  1. [JTable] Couleur des cellules
    Par eighty_three dans le forum Composants
    Réponses: 2
    Dernier message: 20/05/2008, 17h55
  2. [JTable]Fusionner des cellules
    Par bassim dans le forum Composants
    Réponses: 2
    Dernier message: 11/07/2007, 19h24
  3. JTable taille des cellules
    Par agougeon dans le forum Composants
    Réponses: 1
    Dernier message: 04/10/2006, 09h37
  4. [Swing][JTable]Fusion des cellules d'un tableau
    Par LordBlaize dans le forum Composants
    Réponses: 1
    Dernier message: 23/03/2006, 18h48
  5. [JTable] Fusionner des cellules
    Par Rimk78 dans le forum Composants
    Réponses: 2
    Dernier message: 13/05/2005, 15h53

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