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 :

Combobox dans Jtable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Combobox dans Jtable
    Bonsoir, je veux créer une jtable dans laquelle chaque cellule contient un combobox.

    Actuellement, à l'écran, je vois (à la place des combobox) :
    javax.swing.JComboBox[,0,0,0x0,invalid,layout=com.sun.java.swing.plaf.windows.WindowsComboBoxUI$3,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@167d940,flags=16777544,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=] javax.swing.JComboBox[,0,0,0x0,invalid,layout=com.sun.java.swing.plaf.windows.WindowsComboBoxUI$3,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@167d940,flags=16777544,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=] javax.swing.JComboBox[,0,0,0x0,invalid,layout=com.sun.java.swing.plaf.windows.WindowsComboBoxUI$3,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@167d940,flags=16777544,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=]

    jvous mets le bout de code concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    table = new Table_Cable();
    			table.tm = new Table_Model(new String [] {"POSITION DEPART","POSITION ARRIVEE", "LONGUEUR"});
    			table.set_Table();
    			table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    			table.setFont(new Font("Microsoft Sans Serif", Font.BOLD, 16));
    			table.centrerTable(table);
     
    			for(int j=0;j<3;j++){
    				for(int i=0;i<10;i++){
    				table.tm.setValueAt(new JComboBox(), i, j);
     
    				}
    			}
    Je pense que ca vient du layout des cellules que je n'ai pas défini.
    TableCellRenderer?

    Je ne toruve pas comment l'utiliser.

    Merci de votre aide

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276

  3. #3
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut oUI
    ca ne marche pas en faisant comme c'est décrit puisque je n'ai pas écrit ma classe héritant de JTable de la même façon.

    Mes dates sont contenues dans un ArrayList[].

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    As tu au moins lu le passage sur les renderers et editors?

  5. #5
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Oui
    Ca ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TableColumn sportColumn = table.getColumnModel().getColumn(2);
    ...
    JComboBox comboBox = new JComboBox();
    comboBox.addItem("Snowboarding");
    comboBox.addItem("Rowing");
    comboBox.addItem("Chasing toddlers");
    comboBox.addItem("Speed reading");
    comboBox.addItem("Teaching high school");
    comboBox.addItem("None");
    sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
    ca ne m'affiche rien (la Jtable est vide)

  6. #6
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Dans ce code, tu n'ajoutes pas de données à ta JTable.

  7. #7
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Ok
    Dsl, je vous donne tout le code concerné :

    D'abord, la classe AbstractTableModel:

    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
    package table;
    import java.util.ArrayList;
     
    import javax.swing.table.AbstractTableModel;
     
     public class table_model extends AbstractTableModel {
    	 private static final long serialVersionUID = 545459090L;
       public static String [] labelColonne; //Les entêtes des colonnes
       public static ArrayList [] data; //Les données
     
       public table_model (String [] titres) {
         labelColonne = titres;
         //On initialise la structure de donnée
         data = new ArrayList[labelColonne.length];
         for (int i = 0; i < labelColonne.length;i++)
        	 data[i] = new ArrayList();
       }
     
       //Fonctions qu'il est nécéssaire de surcharger
     
       public String  getColumnName  (int col)          {return labelColonne[col].toString();}
       public int     getRowCount    ()                 {return data[0].size();}
       public int     getColumnCount ()                 {return labelColonne.length;}
       public boolean isCellEditable (int row, int col) {return false; }
       public Object  getValueAt     (int row, int col) {return data[col].get(row);}
     
       //On ajoute , on remplace ou on supprimer suivant les valeurs entrées...
       public void setValueAt(Object value, int row, int col) {
         if (value != null) {
           if (row >= data[col].size())
             data[col].add(row,value);
           else
             data[col].set(row,value);
         } else 
           for (int i = 0; i < getColumnCount(); i++) 
             data[i].remove(row);
         fireTableDataChanged();
       }
     
     
       //Permet de tout éffacer
       public void clear () {
         for (int i = 0;i < labelColonne.length;i++)
           data[i].clear();
         fireTableDataChanged();
       }
     }
    ensuite la classe JTable :

    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
    package table;
    import javax.swing.JLabel;
    import javax.swing.*;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableColumnModel;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableCellEditor;
     
     public class table_cable extends JTable {
    	 private static final long serialVersionUID = 1213124898L;
    	 public TableColumnModel model = null;
    	 private TableColumn table_column = null;
    	 public table_model tm = null;
    	 public JComboBox combo = null;
    	 public table_cable () {
    	 }
    	 public void set_Table(){
    		 if(tm != null){
          		setModel(tm);
          		((DefaultTableCellRenderer)this.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(SwingConstants.CENTER);
     
              	//setRowHeight();
          	}
    	 }
    	 public void set_Model_Cable(){
    	   model = getColumnModel();
    	   model.getColumn(0).setPreferredWidth(140); 
    	   model.getColumn(3).setPreferredWidth(140);  
    	 }
    	 public void set_Model_Objets(){
    	   model = getColumnModel();
    	   model.getColumn(0).setPreferredWidth(140); 
    	   model.getColumn(1).setPreferredWidth(140);
    	   model.getColumn(2).setPreferredWidth(140);
    	   model.getColumn(3).setPreferredWidth(140);
    	   model.getColumn(4).setPreferredWidth(140);
    	   model.getColumn(5).setPreferredWidth(140);
    	   model.getColumn(6).setPreferredWidth(140);
    	   model.getColumn(7).setPreferredWidth(140);
    	 }
    	 public void set_Model_Salle(){
    		   model = getColumnModel();
    		   model.getColumn(0).setPreferredWidth(140); 
    		   model.getColumn(1).setPreferredWidth(140);
    		 }
     
    	 public void centrerTable(JTable table){
    	   DefaultTableCellRenderer custom = new DefaultTableCellRenderer();
    	   custom.setHorizontalAlignment(JLabel.CENTER);
    	   for(int i = 0;i < table.getColumnCount();i++){
    		   table.getColumnModel().getColumn(i).setCellRenderer(custom);
    	   }
    	 }
     
    	 public void set_table_Salle(int nb_columns){
    		 model = getColumnModel();
     
    		 combo = new JComboBox();
    		 combo.addItem("1");
    		 combo.addItem("-1");
     
    		 for(int i = 0;i<nb_columns;i++){
    			 table_column = model.getColumn(i);
    			 TableCellEditor tce = new DefaultCellEditor(combo);
    			 table_column.setCellEditor(tce);
    		 }
     
    	 }
     }
    enfin mon interface JDialog :

    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
    package other_dialog;
     
    import javax.swing.JPanel;
     
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.BorderLayout;
    import javax.swing.BorderFactory;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.JTextArea;
    import java.awt.Rectangle;
    import javax.swing.JScrollPane;
    import java.util.ArrayList;
    import simple_class.auto_size_cells_table;
    import simple_class.datas;
    import table.table_cable;
    import table.table_model;
    import javax.swing.JComboBox;
     
    public class creer_salle_phase1_mod extends JDialog {
     
    	private static final long serialVersionUID = 145663433L;
     
    	private JPanel jContentPane = null;
     
    	private JScrollPane jScrollPane = null;
     
    	private table_cable table = null;
     
    	private String nom_fichier_local;
     
    	private int x_local,y_local;
     
    	/**
             * @param owner
             */
    	public creer_salle_phase1_mod(JFrame owner,String nom_fichier,int x,int y) {
    		super(owner);
    		nom_fichier_local = nom_fichier;
    		x_local = x;
    		y_local = y;
    		initialize();
    	}
     
    	/**
             * This method initializes this
             * 
             * @return void
             */
    	private void initialize() {
    		this.setSize(1024, 768);
    		this.setContentPane(getJContentPane());
    	}
     
    	/**
             * This method initializes jContentPane
             * 
             * @return javax.swing.JPanel
             */
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			jContentPane.setLayout(null);
    			jContentPane.add(getJScrollPane(), null);
    		}
    		return jContentPane;
    	}
     
    	private table_cable getTC(){
    		if (table == null) {
    			table = new table_cable();
    			String[] headers = new String[x_local];
    			int i = 0;
    			while(i < x_local){
    				headers[i] = "D" + i;
    				i++;
    			}
    			table.tm = new table_model(headers);
    			table.set_Table();
     
    			table.set_table_Salle(x_local);
    			ArrayList[] donnes = new ArrayList[x_local];
    			JComboBox cb = new JComboBox();
    			cb.addItem("1");
    			cb.addItem("-1");
    			for(i=0;i<x_local;i++){
    				donnes[i] = new ArrayList();
    				for(int j=0;j<y_local;j++)
    					donnes[i].add(cb);
    			}
    			table.tm.data = donnes;
    			table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    			table.setFont(new Font("Microsoft Sans Serif", Font.BOLD, 16));
    			table.centrerTable(table);
    			//auto_size_cells_table.autoSizeCells(table, true, false);
    			table.set_Model_Salle();
     
    		}
    		return table;
    	}
    	/**
             * This method initializes jScrollPane  
             *      
             * @return javax.swing.JScrollPane      
             */
    	private JScrollPane getJScrollPane() {
    		if (jScrollPane == null) {
    			jScrollPane = new JScrollPane();
    			jScrollPane.setBounds(new Rectangle(0, 0, 1000, 660));
    			jScrollPane.setViewportView(getTC());
    			jScrollPane.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 2));
    		}
    		return jScrollPane;
    	}
     
    }

    Voila, et la toutes les cases du tableau sont remplis avec :
    javax.swing.JComboBox[,0,0,0x0,invalid,layout=com.sun.java.swing.plaf.windows.WindowsComboBoxUI$3,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@1b8fcdd,flags=16777544,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=1]

    Je ne vois vraiment pâs pourquoi
    ni comment faire
    Merci de votre aide

  8. #8
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ArrayList[] donnes = new ArrayList[x_local];
    JComboBox cb = new JComboBox();
    cb.addItem("1");
    cb.addItem("-1");
    for(i=0;i<x_local;i++){
    	donnes[i] = new ArrayList();
    	for(int j=0;j<y_local;j++)
    		donnes[i].add(cb);
    }
    table.tm.data = donnes;
    Pourquoi mets-tu des combobox dans tes données???? il me semble avoir déjà expliqué que les JCombobox ne font pas parti de tes données. C'est juste un éditeur de cellule.

  9. #9
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Ok
    Entre temps j'ai remplacé par :

    Maintenant, toutes les cellules sont remplies avec -1, mais je ne peux pas les modifier, lorsque je clique dessus, pas de menu déroulant...

    C'est bizarre

  10. #10
    Membre éclairé Avatar de donnadieujulien
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 433
    Par défaut Trouvé
    fallai faire :

    public void isCellEditable(...)
    return true;

    dans la clase JTable, et la ça marche...

    Merci pour votre aide

  11. #11
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Tu trouveras de multiples posts concernant ce sujet en faisant une recherche dans le forum Java > Interfaces Graphiques en Java > AWT/SWING > Composants > Tables.

    Par exemple : Jcombobox dans JTable

    Si malgré tout tes problèmes persistent, tu peux toujours reposter.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/10/2009, 16h51
  2. jtable, combobox dans une cellule
    Par fraco dans le forum Composants
    Réponses: 8
    Dernier message: 27/10/2007, 11h20
  3. [DEBUTANT] Insérer une combobox dans une jTable
    Par Geolem dans le forum Composants
    Réponses: 2
    Dernier message: 25/11/2006, 17h02
  4. ComboBox dans un Jtable
    Par hbzied dans le forum Composants
    Réponses: 4
    Dernier message: 23/05/2006, 16h18
  5. combobox dans jtable
    Par nicotine002 dans le forum Composants
    Réponses: 1
    Dernier message: 10/01/2006, 23h01

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