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 :

[debutant]editer une JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Par défaut [debutant]editer une JTable
    Bonjour,
    J'ai écris une JTable pour saisir les résultat d'une liste de rencontre entre deux joueurs.
    Je me suis basé sur
    exemple

    Mais j'ai quelques soucis :
    J'ai surchargé isCellEditable(int row, int col) pour qu'il retourne true systèmatiquement, cependant je n'arrive à modifier aucune valeur de mon tableau. De plus, mais c'est certainement lié, la comboBox ne s'affiche pas (aucun choix de ma liste n'est proposé).

    Je souhaite afficher un menu au dessus du tableau, mais je n'arrive pas à l'afficher en même temps que la table.
    class TableurTable extends JPanel {

    public TableurTable () {
    super(new GridLayout(1,0));

    JTable table = new JTable(new MyTableModel());

    table.setPreferredScrollableViewportSize(new Dimension(500, 70));

    JScrollPane scrollPane = new JScrollPane(table);

    setUpResultColumn(table, table.getColumnModel().getColumn(3));
    add(scrollPane);
    }

    public void setUpResultColumn(JTable table, TableColumn resultColumn)
    {
    //Set up the deitor for the result cells
    JComboBox comboBox = new JComboBox();
    comboBox.addItem("1 - 0");
    comboBox.addItem("0.5 - 0.5");
    comboBox.addItem("0 - 1");
    comboBox.addItem("F - 1");
    comboBox.addItem("1 - F");
    comboBox.addItem("F - F");
    comboBox.addItem("0 - 0");
    resultColumn.setCellEditor(new DefaultCellEditor(comboBox));

    //Set up tool tips for the sport cells
    DefaultTableCellRenderer renderer =
    new DefaultTableCellRenderer();
    renderer.setToolTipText("Click for combo box");
    resultColumn.setCellRenderer(renderer);
    }

    class MyTableModel extends AbstractTableModel {

    String[] columnNames = { "Table", "Num pairing", "White", "result", "Num Pairing", "Black"};
    Object[][] data = {{ new Integer(1), new Integer(1), "Dupont", "1 - 0", new Integer(3), "Durand"},
    {new Integer(2), new Integer(4), "Martin", "1 - 0", new Integer(2), "Boulanger"}};

    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];
    }
    public Class getColumnClass(int c) {
    return getValueAt(0, c).getClass();
    }
    public boolean isCellEditable(int row, int col) {
    /*if (3==col) return true;
    else return false;*/
    return true;
    }
    public void setValueAt(Object value, int row, int col) {
    System.out.println("Setting value at " + row + "," +
    col + " to " + value + "(an instance of " +
    value.getClass() + ")");

    data[row][col] = value;
    fireTableCellUpdated(row, col);
    }
    }
    }
    //------------------------------------------------------------------------------------------

    class PanneauPrincipal extends JPanel
    /*implements Configuration*/ {

    //Variables d'instance
    private JMenuBar menuBar = new JMenuBar();
    private JMenu menuFichier = new JMenu("Fichier");
    private JMenu menuJoueur = new JMenu("Joueur");
    private JMenu menuAppariement = new JMenu("Appariement");
    private JFrame frame;
    private ListOfPlayer listPlayer;

    /** Item du menu fichier */
    private JMenuItem itemNew = new JMenuItem("Nouveau");
    private JMenuItem itemOpen = new JMenuItem("Ouvrir");
    private JMenuItem itemSave = new JMenuItem("Sauver");
    private JMenuItem itemQuit = new JMenuItem("Quitter");

    /** Item du menu Joueur */
    private JMenuItem itemAddPlayer = new JMenuItem("Ajouter joueur");
    private JMenuItem itemOutPlayer = new JMenuItem("Sortir joueur");

    /** Item du menu Appariement */


    void executerActionOuvrir(){

    JOptionPane.showMessageDialog(this,"Exécution de l'action Ouvrir");
    }

    void executerAddPlayer(){
    DialogAddPlayer dialog=new DialogAddPlayer(frame );
    // dialog.setLocationRelativeTo(frame);

    if (dialog.returnOK())
    listPlayer.addPlayer(dialog.getName(), dialog.getSurname(), dialog.getElo());

    }

    void executerActionQuitter(){
    if (JOptionPane.showConfirmDialog(this, "Êtes-vous sûr de vouloir quitter",
    "Confirmation",JOptionPane.YES_NO_CANCEL_OPTION)==JOptionPane.YES_OPTION)
    System.exit(0);
    }
    //Constructeur
    public PanneauPrincipal(JFrame frame, ListOfPlayer listPlayer) {

    this.frame=frame;
    this.listPlayer=listPlayer;
    menuFichier.setText("Fichier");
    menuFichier.add(itemNew);
    itemOpen.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){executerActionOuvrir();}
    });
    menuFichier.add(itemOpen);
    menuFichier.addSeparator();
    menuFichier.add(itemSave);
    menuFichier.addSeparator();
    itemQuit.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){executerActionQuitter();}
    });
    menuFichier.add(itemQuit);

    itemAddPlayer.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){executerAddPlayer();}
    });
    menuJoueur.add(itemAddPlayer);
    menuJoueur.add(itemOutPlayer);

    setLayout(new BorderLayout());
    add(menuBar, BorderLayout.NORTH);
    menuBar.add(menuFichier);
    menuBar.add(menuJoueur);
    }
    }
    Merci pour vos éclaircissement.
    Xavier

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setValueAt(Object value, int row, int col) {
    System.out.println("Setting value at " + row + "," +
    col + " to " + value + "(an instance of " +
    value.getClass() + ")");
    Est-ce que le println s'affiche ?

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Tu peux essayer la méthode au lieu du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fireTableCellUpdated(row, col)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Par défaut
    Citation Envoyé par marchand_de_sable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setValueAt(Object value, int row, int col) {
    System.out.println("Setting value at " + row + "," +
    col + " to " + value + "(an instance of " +
    value.getClass() + ")");
    Est-ce que le println s'affiche ?
    Non, c'est celui la qui s'affiche :
    public boolean isCellEditable(int row, int col) {
    /*if ((3==col) || (4==col)) return true;
    else return false;*/
    System.out.println(row + ", " + col + " is Editable");
    return true;
    }

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Par défaut
    Le programme ne rentre donc même pas dans setValueAt()....

    Et aucune exception n'est levée avant ou après avoir essayé de modifier tes cellules ??

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Faut que tu m'expliques un truc... J'ai essayé ç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
     
    class TestTableModel extends JPanel {
     
    	public TestTableModel() {
    		super(new GridLayout(1, 0));
     
    		JTable table = new JTable(new MyTableModel());
     
    		table.setPreferredScrollableViewportSize(new Dimension(500, 70));
     
    		JScrollPane scrollPane = new JScrollPane(table);
     
    		setUpResultColumn(table, table.getColumnModel().getColumn(3));
    		add(scrollPane);
    	}
     
    	public void setUpResultColumn(JTable table, TableColumn resultColumn) {
    		// Set up the deitor for the result cells
    		JComboBox comboBox = new JComboBox();
    		comboBox.addItem("1 - 0");
    		comboBox.addItem("0.5 - 0.5");
    		comboBox.addItem("0 - 1");
    		comboBox.addItem("F - 1");
    		comboBox.addItem("1 - F");
    		comboBox.addItem("F - F");
    		comboBox.addItem("0 - 0");
    		resultColumn.setCellEditor(new DefaultCellEditor(comboBox));
     
    		// Set up tool tips for the sport cells
    		DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
    		renderer.setToolTipText("Click for combo box");
    		resultColumn.setCellRenderer(renderer);
    	}
     
    	class MyTableModel extends AbstractTableModel {
     
    		String[] columnNames = { "Table", "Num pairing", "White", "result",
    				"Num Pairing", "Black" };
     
    		Object[][] data = {
    				{ new Integer(1), new Integer(1), "Dupont", "1 - 0",
    						new Integer(3), "Durand" },
    				{ new Integer(2), new Integer(4), "Martin", "1 - 0",
    						new Integer(2), "Boulanger" } };
     
    		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];
    		}
     
    		public Class getColumnClass(int c) {
    			return getValueAt(0, c).getClass();
    		}
     
    		public boolean isCellEditable(int row, int col) {
    			/*
    			 * if (3==col) return true; else return false;
    			 */
    			return true;
    		}
     
    		public void setValueAt(Object value, int row, int col) {
    			System.out.println("Setting value at " + row + "," + col + " to "
    					+ value + "(an instance of " + value.getClass() + ")");
     
    			data[row][col] = value;
    			fireTableCellUpdated(row, col);
    		}
    	}
    }
     
    // ------------------------------------------------------------------------------------------
     
    class PanneauPrincipal extends JPanel
    /* implements Configuration */{
     
    	// Variables d'instance
    	private JMenuBar menuBar = new JMenuBar();
     
    	private JMenu menuFichier = new JMenu("Fichier");
     
    	private JMenu menuJoueur = new JMenu("Joueur");
     
    	private JMenu menuAppariement = new JMenu("Appariement");
     
    	private JFrame frame;
     
    //	private ListOfPlayer listPlayer;
     
    	/** Item du menu fichier */
    	private JMenuItem itemNew = new JMenuItem("Nouveau");
     
    	private JMenuItem itemOpen = new JMenuItem("Ouvrir");
     
    	private JMenuItem itemSave = new JMenuItem("Sauver");
     
    	private JMenuItem itemQuit = new JMenuItem("Quitter");
     
    	/** Item du menu Joueur */
    	private JMenuItem itemAddPlayer = new JMenuItem("Ajouter joueur");
     
    	private JMenuItem itemOutPlayer = new JMenuItem("Sortir joueur");
     
    	/** Item du menu Appariement */
     
    	void executerActionOuvrir() {
     
    		JOptionPane.showMessageDialog(this, "Exécution de l'action Ouvrir");
    	}
     
    	void executerAddPlayer() {
    //		DialogAddPlayer dialog = new DialogAddPlayer(frame);
    //		// dialog.setLocationRelativeTo(frame);
    //
    //		if (dialog.returnOK())
    //			listPlayer.addPlayer(dialog.getName(), dialog.getSurname(), dialog
    //					.getElo());
     
    	}
     
    	void executerActionQuitter() {
    		if (JOptionPane.showConfirmDialog(this,
    				"Êtes-vous sûr de vouloir quitter", "Confirmation",
    				JOptionPane.YES_NO_CANCEL_OPTION) == JOptionPane.YES_OPTION)
    			System.exit(0);
    	}
     
    	// Constructeur
    //	public PanneauPrincipal(JFrame frame, ListOfPlayer listPlayer) {
    	public PanneauPrincipal(JFrame frame) {
     
    		this.frame = frame;
    //		this.listPlayer = listPlayer;
    		menuFichier.setText("Fichier");
    		menuFichier.add(itemNew);
    		itemOpen.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				executerActionOuvrir();
    			}
    		});
    		menuFichier.add(itemOpen);
    		menuFichier.addSeparator();
    		menuFichier.add(itemSave);
    		menuFichier.addSeparator();
    		itemQuit.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				executerActionQuitter();
    			}
    		});
    		menuFichier.add(itemQuit);
     
    		itemAddPlayer.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				executerAddPlayer();
    			}
    		});
    		menuJoueur.add(itemAddPlayer);
    		menuJoueur.add(itemOutPlayer);
     
    		setLayout(new BorderLayout());
    		add(menuBar, BorderLayout.NORTH);
    		menuBar.add(menuFichier);
    		menuBar.add(menuJoueur);
    	}
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame("toto");
    		frame.getContentPane().add(new TestTableModel());
    		frame.setVisible(true);
    	}
    }
    qui est la même chose que toi, les ListOfPlayer en moins, vu que je ne connais pas cette classe, et que j'ai créé une frame pour afficher ta JTable.

    Et devine quoi? Ben ça marche...
    Avec la mise en couleur de la bordure et tout le toutim + impression sur la console de ceci :
    Setting value at 0,1 to 1(an instance of class java.lang.Integer)
    Setting value at 0,0 to 1(an instance of class java.lang.Integer)
    Setting value at 0,1 to 21(an instance of class java.lang.Integer)
    Setting value at 1,1 to 4(an instance of class java.lang.Integer)
    Setting value at 0,2 to Dupont(an instance of class java.lang.String)
    Setting value at 0,3 to 1 - 0(an instance of class java.lang.String)
    Setting value at 0,4 to 3(an instance of class java.lang.Integer)
    Alors, où est ton problème?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Par défaut
    Citation Envoyé par seiryujay
    Faut que tu m'expliques un truc... J'ai essayé ça :
    [...]
    qui est la même chose que toi, les ListOfPlayer en moins, vu que je ne connais pas cette classe, et que j'ai créé une frame pour afficher ta JTable.
    Pour l'instant il n'y a rien d'extraordinaire. C'est une classe qui hérite de ArrayList

    Et devine quoi? Ben ça marche...
    Avec la mise en couleur de la bordure et tout le toutim + impression sur la console de ceci :

    Alors, où est ton problème?
    Le problème est donc sans doute ailleurs. Voici le main :
    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 pass {
     
    	/**
             * @param args
             */
    	private	JMenuBar menuPrincipal = new JMenuBar();
    	public static void main(String[] args) {
     
    		// TODO Auto-generated method stub
    		ListOfPlayer listPlayer=new ListOfPlayer();
    		JFrame frame=new JFrame("Pass");
     
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //	 L'application se termine lorsque la fenÍtre est fermÈe
    //	 Mise en place du panneau principal au centre de la fenÍtre
    	//	frame.getContentPane().add(new PanneauPrincipal(frame, listPlayer),
    	//                                  BorderLayout.CENTER);
     
    		TableurTable table = new TableurTable();
    	        table.setOpaque(true);
    		frame.setContentPane(table);
    		frame.pack();
    		frame.setVisible(true);
    	}
    }
    Le code est écrit avec eclipse version 3.1.2 sous debian testing, java.vm.name=GNU libgcj, java.vm.version=4.1.2 20060613 (prerelease) (Debian 4.1.1-5)

    A ce propos. Pouvez-vous me dire pourquoi (même quand je décommente la ligne
    frame.getContentPane().add(new PanneauPrincipal...), le menu ne s'affiche pas, alors que quand je supprime le frame.setContentPane(table), je le voie ?

    Sinon, c'est peut-être moi qui ne sait pas l'éditer. Il suffit normalement de cliquer sur la valeur à modifier et de saisir la nouvelle valeur ?

Discussions similaires

  1. Editer une JTable
    Par didaw dans le forum Composants
    Réponses: 1
    Dernier message: 23/11/2007, 17h28
  2. [DEBUTANT] Insérer une combobox dans une jTable
    Par Geolem dans le forum Composants
    Réponses: 2
    Dernier message: 25/11/2006, 17h02
  3. [debutant] est-il possible de trier une Jtable ?
    Par d_token dans le forum Composants
    Réponses: 10
    Dernier message: 04/08/2006, 09h40
  4. [debutant]comemnt editer une class
    Par pierrot10 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 23/06/2006, 12h14
  5. Editer une cellule de Jtable
    Par calypso dans le forum Composants
    Réponses: 3
    Dernier message: 22/04/2004, 10h45

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