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 :

Problème d'utilisation d'un JTable


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Problème d'utilisation d'un JTable
    Bonjour,

    J'ai 2 problemes:
    -Je ne sais pas comment il faut faire pour ajouter une ligne à un JTable
    -Je ne sais pas comment rendre seulement ma premiere colonne Editable.
    J'ai regardé sur pas mal de site mais aucun ne repond a mes attentes.

    voici mon code source:
    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
    public class Test1 extends JFrame  {
     
    	public JTable table;
    	JPanel pann = new JPanel(new GridLayout(0,1));
    	JPanel gestion = new JPanel(new GridLayout(1,3));
     
    	public Test1() {
    		super();
    		setBounds(100, 100, 500, 375);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JButton Ajouter = new JButton("Ajouter");
    		JButton Supprimer = new JButton("Supprimer");
    		JButton Valider = new JButton("Valider");
    		pann.setPreferredSize(new Dimension(500, 500));
     
    		table = new JTable ( new TableModel(6,3));
     
    		JScrollPane scrollPane = new JScrollPane(table);
    		table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    		pann.add(scrollPane);
     
    			getContentPane().add("Center",pann);
    			gestion.add(Ajouter);
    			gestion.add(Supprimer);
    			gestion.add(Valider);
    			setSize(600,400);
    			getContentPane().add("South",gestion);
     
     
     
    			Ajouter.addActionListener(new ActionListener() {
    			      public void actionPerformed(ActionEvent e){
                ajouterActionPerformed(e);
     
    			      }
    			});
     
    	}
    	public void ajouterActionPerformed(ActionEvent e){
     
    		String [] data = new String [table.getColumnCount()];
     
     
    	}
    	public static void main(String[] args)
    	{
    		Test1 test = new Test1();
    		test.pack();
    		test.setVisible(true);
     
    	}
    //////////////////DEFINITION DU JTABLE /////////////
    	class TableModel extends AbstractTableModel
    	{
    		private String[] columnNames={"toto","tutu","titi"};
    		private Object[][] data;
     
    		public TableModel (int r , int c )
    		{
    			data = new Object[r][c];
     
    			columnNames = new String[c];			
    			for ( int i = 0 ; i < r ; i++ )
    			{
    				for ( int j = 0 ; j < c ; j++ )
    				{
    					data[i][j] =i;
    				}
    			}
    		}
     
    		public int getColumnCount() {
     
    			return columnNames.length;
    		}
     
    		public int getRowCount() {
     
    			return data.length;
    		}
     
    		public Object getValueAt(int rowIndex, int columnIndex) {
     
    			return data[rowIndex][columnIndex];
    		}
     
     
    		public Class getColumnClass(int c) 
    		{
    			return getValueAt(0, c).getClass();
    		}
     
     
    		public boolean isCellEditable(int row, int col)
    		{
    			return true;
    		}
     
    		public void setValueAt(Object value, int row, int col) 
    		{
    			data[row][col] = value;
    			fireTableCellUpdated(row, col);
    		}
     
    	}
     
     
    }
    voila.
    Merci pour votre aide

  2. #2
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    > ajouter une ligne à un JTable

    - Soit tu fais un setValueAt pour MODIFIER un ligne existante,
    - Soit tu peux AJOUTER une nouvelle ligne en agrandissant ton tableaux de données (data) (le nombre de lignes affichées en dépend par le biais de getRowCount())

    > seulement ma premiere colonne Editable
    cf. classe AbstractTableModel fonction isCellEditable a redéfinir.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par Yannick_from_31
    Bonjour,

    > ajouter une ligne à un JTable

    - Soit tu fais un setValueAt pour MODIFIER un ligne existante,
    - Soit tu peux AJOUTER une nouvelle ligne en agrandissant ton tableaux de données (data) (le nombre de lignes affichées en dépend par le biais de getRowCount())

    > seulement ma premiere colonne Editable
    cf. classe AbstractTableModel fonction isCellEditable a redéfinir.
    Pour l'ajout de ligne je ne vois vraiment pas! OK j'ai le nombre de ligne total mais apres je ne vois pas ce qu'il faut faire.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Tu veux ajouter une ligne, tu dois donc agrandir ta structure qui stoque tes données : data.

    tu peux ajouter une fonction dans ton model comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void addANewEmptyLine(){
     // faire une copie temporaire de data
     [...]
     // init data avec une taille plus grande de 1
     [...]
     // copier ton tmp dans data
     [...]
     // appeler fire<je sais plus quoi>Changed() pour MAJ de l'IHM
     [...]
    }

    C'est un peu lourd en utilisant un tableau d'objet mais c'est faisable !
    Sinon tu peux simplement utiliser par exemple une ArrayList pour data et alors l'ajout, suppression... de lignes est simplifié.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Je suis toujours au même niveau rien ne marche

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Bon j'ai procédé autrement. J'ai utilisé DefaultTableModel

    voici le code
    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
    public class Test extends JFrame implements Serializable
    {
     
    	public JTable table;
    	JPanel pann = new JPanel(new GridLayout(0,1));
    	JPanel gestion = new JPanel(new GridLayout(1,3));
    	public DefaultTableModel model;
     
     
    	public Test()
    	{
    		JButton Ajouter = new JButton("Ajouter");
    		JButton Supprimer = new JButton("Supprimer");
    		JButton Valider = new JButton("Valider");
    		pann.setPreferredSize(new Dimension(500, 500));
     
    		try {
    		//String[] columnNames={"toto","tutu","titi"};
    		model = new DefaultTableModel(6,3);
    		table = new JTable();
    		table.setModel(model);
     
    		}catch(Exception e){
    					      e.printStackTrace();
    		}
     
     
    		JScrollPane scrollPane = new JScrollPane(table);
    		//table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    		pann.add(scrollPane);
     
    		getContentPane().add("Center",pann);
    		gestion.add(Ajouter);
    		gestion.add(Supprimer);
    		gestion.add(Valider);
    		setSize(600,400);
    		getContentPane().add("South",gestion);
     
     
    		Ajouter.addActionListener(new ActionListener() {
    				  			      public void actionPerformed(ActionEvent e){
    		                      ajouterActionPerformed(e);
     
    		 		            }
    		            });
     
    		Supprimer.addActionListener(new ActionListener() {
    				  			      public void actionPerformed(ActionEvent e){
    								supprimerActionPerformed(e);
    								}
     
     
    		            });
     
     
    		Valider.addActionListener(new ActionListener() {
    									public void actionPerformed(ActionEvent e){
    										sauveActionPerformed(e);
    									setVisible(false);
     
     
    								       }
    								        });
    	}
     
     
    	public void supprimerActionPerformed(ActionEvent e){
     
     
    	                    if(table.isEditing()){
    								      if (table.getCellEditor() != null) {
    								              table.getCellEditor().stopCellEditing();
    								      }
                                   }
     
                            int [] selected = table.getSelectedRows();
    						for (int i = selected.length - 1; i >= 0; i--)
    						model.removeRow(selected[i]);
    	}
     
    	public void ajouterActionPerformed(ActionEvent e){
     
    						String [] data = new String [model.getColumnCount()];
    						//data[0] = "http://";
    						model.addRow(data);
    	}
     
    	public void sauveActionPerformed(ActionEvent e) {
     
     
                     if(table.isEditing()){
    					if (table.getCellEditor() != null) {
    							       table.getCellEditor().stopCellEditing();
     
    	}
     
     
     
    	public static void main(String[] args)
    	{
    		Test test = new Test();
    		test.pack();
    		test.setVisible(true);
     
    	}
     
    }
    Le probleme maintenant est de rendre mes 2 dernieres colonne non editable.
    Mais je ne sais pas pourquoi mais je ne peux pas utiliser ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		public boolean isCellEditable(int row, int col)
    		{
    			 if(col==0)
    			return true;
    			 else
    				 return false;
    		}
    Est ce normal??
    Est ce que c'est possible de rendre des cellule non EDitable avec un DefaultTableModel ??

    Merci de vos réponses

  7. #7
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Si tu regardes bien DefaultTableModel étend AbstractTableModel !
    Donc de la même façon, tu dois créer une classe qui étend DefaultTableModel et redéfinir isCellEditable() puis utiliser ce model là.

    C'est tout simple.

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

Discussions similaires

  1. [JTable] Problème d'utilisation de print()
    Par RR instinct dans le forum Composants
    Réponses: 8
    Dernier message: 31/12/2010, 18h00
  2. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35
  3. [cvs] problèmes d'utilisation
    Par gromite dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 29/06/2004, 17h41
  4. Problème: Requête utilisant NOT IN
    Par fages dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/05/2004, 10h18
  5. problème d'utilisation avec turbo pascal 7.0
    Par le 27 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 03/12/2003, 10h44

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