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 :

Choisir le nombre de colonne et de ligne d'une JTable


Sujet :

Composants Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut Choisir le nombre de colonne et de ligne d'une JTable
    Bonjour,

    Je souhaiterais choisir la dimension de ma JTable (nombre de colonne et de ligne) via une JComboBox par exemple : 2x2,3x3 , etc ... donc j'ai fait un addActionListener à ma liste (JComboBox) pour que lorsque je clique sur une des options, un évenement se lance et c'est là que j'aimerais redéfinir ma JTable mais impossible de trouver une méthode, j'ai essayé de remover le component et de le recréer avec une taille différente mais aucun résultat la table ne change pas d'apparence,... Pouvez-vous m'aider ?

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tu dois créer ton propre TableModel en créant un AbstractTableModel. Ensuite, tu surcharges getColumnCount() et getRowCount() présentent dnas l'interface TableModel. Par contre, il ne faudra pas oublié d'ajuster la taille du tableau interne du modèle lorsque tu fais un agrandissement.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut merci
    Merci je vais essayer

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut re
    en fait je n'ai pas très bien compris, voila où j'en suis : j'ai une classe matrice qui est un tableau de double et une autre classe servant de gui avec une JTable mais je ne sais pas oû intégrer ma classe abstraite ModelTable ? Quelqu'un pourrait m'éclairer sur je sujet ?

    P.S. : apparemment la JTable veut un tableau de String pour y faire afficher les données ou y a t'il moyen de prendre directement les doubles ?

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut MVC
    Pour implémenter MVC, il ne me reste plus qu'à y intégrer un controlleur comme j'ai compris ? Comme je peux déjà obtenir un modèle qui est la classe qui dérive AbstractTableModel et la Vue avec un Gui. Est-ce bien juste ?

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut re
    Bonjour je n'ai tjs pas de réponses. Je repose peut être différemment ma question j'ai une classe Matrice servant de modèle par rapport à mon design pattern MVC. Est-ce que je dois directement implémenter à ma classe Matrice l'AbstractTableModel ?

    Merci d'avance pour vos réponses

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par narglix Voir le message
    Est-ce que je dois directement implémenter à ma classe Matrice l'AbstractTableModel ?
    Si tu veux, c'est toi qui décides. Par contre, si tes données dans Matrice sont utilisées ailleurs, autrement que par le modèle, alors tu pourrais peut-être conserver la classe Matrice, et ton modèle deviendrait une sorte de vue de ta Matrice.

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut
    RE j'ai vraiment des soucis au niveau de la compréhension :

    J'ai bien implémenté à l'interface AbstractTableModel ma classe Matrice. Mais je ne comprend pas quel argument je dois passer à ma jtable.setModel(). Pour le moment je lui passe mon tableau de double qui est membre public de ma classe Matrice. J'ai l'impression que c'est faux au niveau de la conception, d'ailleurs quand j'applique le setModel à mon JPanel j'ai un null PointerException alors que mon attribut est initialisé au départ

  9. #9
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Donne un code minimal qui permet de reproduire le problème.

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut re
    Vue :
    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
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.GridLayout;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
     
     
     
     
     
     
    public class MatriceVue extends JFrame implements TableModelListener{
     
        /**
         * 
         */
        private static final long serialVersionUID = -3168581728408118680L;
        private JMenu menuFile;
        private JMenu help;
        private JMenuItem load;
        private JMenuItem save;
        private JMenuItem quitter;
        private JMenuItem about;
        private JMenuBar menu;
        private JComboBox liste;
        private JButton boutonSolution;
        private JPanel downPanel;
        public JTable tableSaisie;
        private JScrollPane scroll;
     
        public Matrice model = new Matrice(5,5);
     
     
     
        public MatriceVue(){
     
            this.initComponents();
            this.build();
            tableSaisie.setModel(model);
        }
     
        //initialisation des composants de l'interface graphique
        private void initComponents() {
     
            menu = new JMenuBar();
            menuFile = new JMenu();
            help = new JMenu();
            load = new JMenuItem();
            save = new JMenuItem();
            quitter = new JMenuItem();
            about = new JMenuItem();
            liste = new JComboBox();
            boutonSolution = new JButton("Solution");
            downPanel = new JPanel();
            downPanel.setLayout(new GridLayout(1,2));
     
     
            tableSaisie = new JTable();
            tableSaisie.setRowHeight(30);
            tableSaisie.getTableHeader().setVisible(true);
            tableSaisie.getTableHeader().setReorderingAllowed(false);
            tableSaisie.setFillsViewportHeight(true);
            scroll=new JScrollPane(tableSaisie,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
     
     
     
     
     
            setDefaultCloseOperation(EXIT_ON_CLOSE);
     
            liste.setModel(new DefaultComboBoxModel(new String[]{"2x2","3x3","4x4","5x5","NxN"}));
     
            liste.addActionListener( new ActionListener( ){
             public void actionPerformed( ActionEvent e )
             {
                JComboBox cb = (JComboBox)e.getSource();
                System.out.println("Index : " + cb.getSelectedIndex());
     
             }});
     
            menuFile.setText("File");
            help.setText("Help");
            load.setText("Load matrix");
            save.setText("Save matrix");
            quitter.setText("Quitter");
            about.setText("About");
            menuFile.add(load);
            menuFile.add(save);
            menuFile.add(quitter);
            help.add(about);
            menu.add(menuFile);
            menu.add(help);
     
            //tableSaisie.setBounds(new Rectangle(10,10));
            setJMenuBar(menu);
     
            pack();
            setVisible(true);
     
        }
     
     
     
     
        //repaint tous les composants de notre JFrame
        public void paintComponent(){
     
         // repaint le component courant
         super.repaint();
        }
     
     
     
        //Affecter les propriétés du JFrame
        public void build(){
            setTitle("Matrice");
            setVisible(true);
            setPreferredSize(new Dimension(600,400));
            setSize(new Dimension(600,400));
            //setResizable(false);
            setLayout(new BorderLayout());
            add(scroll,BorderLayout.CENTER);
            add(downPanel,BorderLayout.SOUTH);
            downPanel.add(liste);
            downPanel.add(boutonSolution);
     
        }
     
        public void tableChanged(TableModelEvent arg0) {
            // TODO Auto-generated method stub
     
        }
     
    }
    Controlleur :
    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
    public class Main extends MatriceVue {
     
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
     
        public static MatriceVue view;
        public static Matrice matrice;
     
     
        public static void main(String[] args) {
            view = new MatriceVue();
            matrice.Afficher();
        }
    }
    Modele :
    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
    public class Matrice extends AbstractTableModel {
        /**
         * 
         */
        private static final long serialVersionUID = 1337856695785836421L;
        private  int nbLigne;             
        private  int nbColonne;             
        public  double[][] tab;    // Matrice M x N
     
        // Création d'une matrice nulle M x N
        public Matrice(int nbLigne, int nbColonne) {
            this.nbLigne = nbLigne;
            this.nbColonne = nbColonne;
            tab = new double[nbLigne][nbColonne];
     
     
            for(int i=0;i<tab.length;i++){
                for(int j=0;j<tab[0].length;j++){
                    tab[i][j]= 0.0;
                }
            }
        }
    }

  11. #11
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut re
    Bonjour, j'ai modifié le controlleur comme cela :

    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
    public class Main {
     
        /**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	public static MatriceVue view;
    	public static Matrice matrice;
     
     
        public static void main(String[] args) {
        	view = new MatriceVue();
        	view.model.Afficher();
        	view.tableSaisie.setModel(view.model);
        }
     
        public void raffraichirTable(){
     
        }
     
    }

    Je n'ai plus le javaPointer null exception par contre je ne comprends pas pourquoi il ne m'affiche rien sur ma JTable alors que quand j'affiche ma matrice dans la console je n'ai que des zéros ?

  12. #12
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut re
    Re, tout le monde.

    Je progresse gentiment, maintenant j'arrive à afficher mon tableau mais par contre si l'utilisateur change une valeur d'une case de ma JTable dès qu'il appuie sur enter pour valider je revoie l'ancienne valeur de ma jtable pourtant j'ai appliqué un fireStructureTable et un repaint. Quelqu'un a une idée ?

  13. #13
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par narglix Voir le message
    Quelqu'un a une idée ?
    Puisque tu as fait des modifications, il nous faut à nouveau ton code pour répondre à ta question

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut
    Vue :
    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
    public class MatriceVue extends JFrame implements TableModelListener{
     
        /**
             * 
             */
    	private static final long serialVersionUID = -3168581728408118680L;
    	private JMenu menuFile;
        private JMenu help;
        private JMenuItem load;
        private JMenuItem save;
        private JMenuItem quitter;
        private JMenuItem about;
        private JMenuBar menu;
        private JComboBox liste;
        private JButton boutonSolution;
        private JPanel downPanel;
        public JTable tableSaisie;
        private JScrollPane scroll;
        private Matrice model;
        private int LigneSel;
        private int ColSel;
     
     
     
        public MatriceVue(Matrice mat){
            model = mat;
            this.initComponents();
            this.build();
            tableSaisie.setModel(model);
            this.tableSaisie.getModel().addTableModelListener(this);
     
        }
     
        //initialisation des composants de l'interface graphique
        private void initComponents() {
     
            menu = new JMenuBar();
            menuFile = new JMenu();
            help = new JMenu();
            load = new JMenuItem();
            save = new JMenuItem();
            quitter = new JMenuItem();
            about = new JMenuItem();
            liste = new JComboBox();
            boutonSolution = new JButton("Solution");
            downPanel = new JPanel();
            downPanel.setLayout(new GridLayout(1,2));
     
     
            tableSaisie = new JTable();
            tableSaisie.getModel().addTableModelListener(tableSaisie);
            tableSaisie.setRowHeight(30);
            tableSaisie.getTableHeader().setVisible(false);
            tableSaisie.getTableHeader().setReorderingAllowed(false);
            tableSaisie.setFillsViewportHeight(true);
            scroll=new JScrollPane(tableSaisie,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
        			JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
     
     
     
     
     
            setDefaultCloseOperation(EXIT_ON_CLOSE);
     
            liste.setModel(new DefaultComboBoxModel(new String[]{"2x2","3x3","4x4","5x5","NxN"}));
     
            liste.addActionListener( new ActionListener( ){
             public void actionPerformed( ActionEvent e )
             {
                JComboBox cb = (JComboBox)e.getSource();
                System.out.println("Index : " + cb.getSelectedIndex());
     
             }});
     
     
            menuFile.setText("File");
            help.setText("Help");
            load.setText("Load matrix");
            save.setText("Save matrix");
            quitter.setText("Quitter");
            about.setText("About");
            menuFile.add(load);
            menuFile.add(save);
            menuFile.add(quitter);
            help.add(about);
            menu.add(menuFile);
            menu.add(help);
     
            //tableSaisie.setBounds(new Rectangle(10,10));
            setJMenuBar(menu);
     
            pack();
            setVisible(true);
     
        }
     
     
     
     
        //repaint tous les composants de notre JFrame
        public void paintComponent(){
     
         // repaint le component courant
         super.repaint();
        }
     
     
     
        //Affecter les propriétés du JFrame
        public void build(){
            setTitle("Matrice");
            setVisible(true);
            setPreferredSize(new Dimension(600,400));
            setSize(new Dimension(600,400));
            //setResizable(false);
            setLayout(new BorderLayout());
            add(scroll,BorderLayout.CENTER);
            add(downPanel,BorderLayout.SOUTH);
            downPanel.add(liste);
            downPanel.add(boutonSolution);
     
        }
     
    	public void tableChanged(TableModelEvent e) {
    		System.out.println("UPDATE");
    		if (e.getType() == TableModelEvent.UPDATE){
    			model.setValueAt(3.5, e.getFirstRow(), e.getColumn());
    			tableSaisie.repaint();
     
    		}
    	}
     
     
    }
    Model:

    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
    public class Matrice extends AbstractTableModel {
        /**
             * 
             */
    	private static final long serialVersionUID = 1337856695785836421L;
    	private  int nbLigne;             
        private  int nbColonne;             
        public  double[][] tab;    // Matrice M x N
     
        // Création d'une matrice nulle M x N
        public Matrice(int nbLigne, int nbColonne) {
            this.nbLigne = nbLigne;
            this.nbColonne = nbColonne;
            tab = new double[nbLigne][nbColonne];
     
     
            for(int i=0;i<tab.length;i++){
            	for(int j=0;j<tab[0].length;j++){
            		tab[i][j]= 0.0;
            	}
            }
        }
     
        // Création d'une matrice depuis une deuxième matrice
        public Matrice(double[][] tab) {
        	nbLigne = tab.length;
            nbColonne = tab[0].length;
            this.tab = new double[nbLigne][nbColonne];
            for (int i = 0; i < nbLigne; i++)
                for (int j = 0; j < nbColonne; j++)
                     this.tab[i][j] = tab[i][j];
        }
     
        // Constructeur de copie
        private Matrice(Matrice matrice) { this(matrice.tab); }
     
        /* Crée et retourne une matrice M x N aléatoire avec des valeurs comprises entre 0 et 1
        public static Matrice random(int M, int N) {
            Matrice A = new Matrice(M, N);
            for (int i = 0; i < M; i++)
                for (int j = 0; j < N; j++)
                    A.tab[i][j] = Math.random();
            return A;
        }*/
     
        // Crée une matrice identité
        public static Matrice identité(int longueur) {
            Matrice matIdentite = new Matrice(longueur, longueur);
            for (int i = 0; i < longueur; i++)
            	matIdentite.tab[i][i] = 1;
            return matIdentite;
        }
     
        // Echange deux lignes d'une matrice
        private void swap(int index1, int index2) {
            double[] temp = tab[index1];
            tab[index1] = tab[index2];
            tab[index2] = temp;
        }
     
        // Crée une transposée
        public Matrice transpose() {
            Matrice matTransposee = new Matrice(nbLigne, nbColonne);
            for (int i = 0; i < nbLigne; i++)
                for (int j = 0; j < nbLigne; j++)
                    matTransposee.tab[j][i] = this.tab[i][j];
            return matTransposee;
        }
     
        /* Additionne deux matrices (C = A + B)
        public Matrice additionner(Matrice matB) {
            Matrice matA = this;
            if (B.M != A.M || B.N != A.N) throw new RuntimeException("Illegal Matrice dimensions.");
            Matrice matC = new Matrice(M, N);
            for (int i = 0; i < M; i++)
                for (int j = 0; j < N; j++)
                    C.tab[i][j] = A.tab[i][j] + B.tab[i][j];
            return C;
        }
     
     
        // Soustrait deux matrices (C = A - B)
        public Matrice soustraire(Matrice B) {
            Matrice A = this;
            if (B.M != A.M || B.N != A.N) throw new RuntimeException("Illegal Matrice dimensions.");
            Matrice C = new Matrice(M, N);
            for (int i = 0; i < M; i++)
                for (int j = 0; j < N; j++)
                    C.tab[i][j] = A.tab[i][j] - B.tab[i][j];
            return C;
        }
     
        // Teste l'égalité entre deux matrices
        public boolean estEgal(Matrice B) {
            Matrice A = this;
            if (B.M != A.M || B.N != A.N) throw new RuntimeException("Illegal Matrice dimensions.");
            for (int i = 0; i < M; i++)
                for (int j = 0; j < N; j++)
                    if (A.tab[i][j] != B.tab[i][j]) return false;
            return true;
        }
     
        // Multiplie deux matrices (C = A * B)
        public Matrice Multiplier(Matrice B) {
            Matrice A = this;
            if (A.N != B.M) throw new RuntimeException("Illegal Matrice dimensions.");
            Matrice C = new Matrice(A.M, B.N);
            for (int i = 0; i < C.M; i++)
                for (int j = 0; j < C.N; j++)
                    for (int k = 0; k < A.N; k++)
                        C.tab[i][j] += (A.tab[i][k] * B.tab[k][j]);
            return C;
        }
     
    */
        // Résoud une matrice carrée NxN avec un second membre rhs
        public Matrice solve(Matrice mat) {
            if (nbLigne != nbColonne || mat.nbLigne != nbColonne || mat.nbColonne != 1)
                throw new RuntimeException("Illegal Matrice dimensions.");
     
            // Création d'une copie des matrices
            Matrice matA = new Matrice(this);
            Matrice matB = new Matrice(mat);
     
            // Elimination par pivotages de Gauss
            for (int i = 0; i < nbColonne; i++) {
     
                // Trouve la ligne pivot et l'échange
                int max = i;
                for (int j = i + 1; j < nbColonne; j++)
                    if (Math.abs(matA.tab[j][i]) > Math.abs(matA.tab[max][i]))
                        max = j;
                matA.swap(i, max);
                matB.swap(i, max);
     
                // La matrice est singulière
                if (matA.tab[i][i] == 0.0) throw new RuntimeException("Matrice is singular.");
     
                // pivot avec B
                for (int j = i + 1; j < nbColonne; j++)
                    matB.tab[j][0] -= matB.tab[i][0] * matA.tab[j][i] / matA.tab[i][i];
     
                // pivot avec A
                for (int j = i + 1; j < nbColonne; j++) {
                    double m = matA.tab[j][i] / matA.tab[i][i];
                    for (int k = i+1; k < nbColonne; k++) {
                        matA.tab[j][k] -= matA.tab[i][k] * m;
                    }
                    matA.tab[j][i] = 0.0;
                }
            }
     
            // substitution de retour
            Matrice matX = new Matrice(nbColonne, 1);
            for (int j = nbColonne - 1; j >= 0; j--) {
                double t = 0.0;
                for (int k = j + 1; k < nbColonne; k++)
                    t += matA.tab[j][k] * matX.tab[k][0];
                matX.tab[j][0] = (matB.tab[j][0] - t) / matA.tab[j][j];
            }
            return matX;
     
        }
     
        // Affiche une matrice
        public void Afficher() {
            for (int i = 0; i < nbLigne; i++) {
                for (int j = 0; j < nbColonne; j++)
                    System.out.print(tab[i][j] +" ");
                System.out.println();
            }
        }
     
    	public int getColumnCount() {
    		return tab[0].length;
    	}
     
    	public int getRowCount() {
     
    		return tab.length;
    	}
     
    	public Object getValueAt(int ligne, int colonne) {
     
    		return new Double(tab[ligne][colonne]);
    	}
     
    	public void setValueAt(double val,int ligne,int colonne){
    		tab[ligne][colonne] = val;
    		fireTableDataChanged();
    		fireTableStructureChanged();  
    	}
     
    	public boolean isCellEditable(int ligne,int colonne){
    		return true;
    	}
     
     
     
     
     
     
    }

    Controleur:

    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
    public class Main {
     
        /**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	public static MatriceVue view;
    	public static Matrice model;
    	public static MonCellRenderer rendu;
     
     
        public static void main(String[] args) {
        	model = new Matrice(2,3);
        	view = new MatriceVue(model);
        }
     
     
    }

  15. #15
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    La surcharge de la méthode "setValueAt" n'est pas correcte. Tu ne respectes pas la signature de la classe mère.
    Je t'encourage vivement à utiliser le tag
    @Override
    pour surcharger les méthodes (si bien sur tu es > 1.5). Cela génère une erreur si la signature n'est pas bonne.

  16. #16
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut re
    cela ne change pas le problème de rajouter la méthode, tjs rien

  17. #17
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Donne à nouveau le code, mais cette fois-ci en supprimant toutes les méthodes inutiles pour reproduire le problème.
    Donne le code minimal et compilable pour reproduire le problème.

  18. #18
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut re
    le problème c'est que en définissant la méthode setValue, ma valeur est de type Object alors que moi j'aurais besoin d'un double. J'ai essayé de caster en double mais ce n'est pas permis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void setValueAt(Object aValue,
                int rowIndex,
                int columnIndex){
     
    		tab[rowIndex][columnIndex] = aValue;
     
    	}

    j'ai pas bien compris le @Override le compilateur me fait une erreur si je le mets juste avant la méthode.

  19. #19
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par narglix Voir le message
    j'ai pas bien compris le @Override le compilateur me fait une erreur si je le mets juste avant la méthode.
    Quoi comme erreur ? Soit t'es en version < 1.5, soit la signature n'est pas correcte.
    Pour la conversion, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[rowIndex][columnIndex] = ( (Double)aValue ).doubleValue();

  20. #20
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 107
    Points : 50
    Points
    50
    Par défaut re
    merci dinobogan il se passe quelque chose quand je modifie la cellule mais par contre il me fait un :

    "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double ???

    Je vais chercher sur google pourquoi j'ai cette exception.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. total colonne et total ligne dans une requete croisée
    Par maamer dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 11/06/2018, 13h37
  2. récupéreation du nombre de colonne par chaque ligne
    Par jockhip12 dans le forum Langage
    Réponses: 20
    Dernier message: 30/03/2012, 14h31
  3. Nombre de ligne d'une jtable
    Par kaisser dans le forum Composants
    Réponses: 2
    Dernier message: 16/01/2010, 03h07
  4. Connaître le nombre de colonnes et de lignes d'un Terminal
    Par Yopii dans le forum Général Java
    Réponses: 8
    Dernier message: 06/01/2010, 23h50
  5. Réponses: 2
    Dernier message: 21/10/2006, 11h26

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