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 et les model


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 107
    Par défaut JTable et les model
    Bonjour, j'ai le code suivant :

    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
     
    import javax.swing.*;
    import javax.swing.table.*;
    import java.awt.*;
    import java.awt.event.*;
    import org.w3c.dom.views.AbstractView;
     
     
     
    public class main {
    	public static void main(String[] args) {
    		JFrame frame = new mainFrame();
    		frame.setVisible(true);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    }
     
    class mainFrame extends JFrame {
    	public mainFrame() {
    		setSize(500, 500);
     
    		TableModel model = new Investissement(30, 5, 10);
    		JTable table = new JTable(model);
    		add(new JScrollPane(table), BorderLayout.CENTER);
     
    		JPanel pane = new JPanel();
    		add(pane, BorderLayout.SOUTH);
     
    		final JTextField textfield = new JTextField();
    		textfield.setColumns(15);
    		pane.add(textfield);
     
    		JButton bouton = new JButton("Valider");
    		pane.add(bouton);
    		bouton.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent event) {
    				String sBalance = textfield.toString();
    				double balance = Double.valueOf(sBalance);
    				/*
    				 *  Mettre a jour la table ....
    				 */
    			}
    		});
     
    	}
     
    }
     
    class Investissement extends AbstractTableModel {
     
    	Investissement(int y, int r1, int r2) {
    		annee = y;
    		min = r1;
    		max = r2;
    		balance = 1000;
    	}
     
    	public int getRowCount() {
    		return annee;
    	}
     
    	public int getColumnCount() {
    		return (max - min + 1);
    	}
     
    	public void setBalance(int b) {
    		balance = b;
    	}
     
    	public Object getValueAt(int r, int c) {
     
    		double rate = ( c + min ) / 100.0;
     
    		double futureBalance = balance * Math.pow( 1 + rate, r );
     
    		return String.format("%.2f", futureBalance);
    	}
     
    	public String getColumnName(int c) {
    		return (c + min) + "%";
    	}
     
    	private int annee;
     
    	private int min;
     
    	private int max;
     
    	private int balance ; 
     
    }

    J'aimerais savoir comment faire, pour mettre la model et le tableau a jour une fois une valeur de balance entrée et le bouton valider pressé ?

    merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    En gros tu ne modifies pas les valeurs directement dans les cellules de ta table, mais elles sont calculées.
    Eh bien pour mettre à jour tes valeurs dans la table, tu fais une méthode dans ton modele, par exemple majDonnees(int annee, int min, int max, int balance), dedans tu mets tes attributs à jour, et à la fin tu fais un fireTableDataChanged()
    J'espère que j'ai bien répondu à tes attentes

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    Il y a deux choses à faire.


    Dans un premier temps tu doit typer ton model et le déclarer en final afin qu'il soit utilisable dans ta classe anonymes :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        final Investissement model = new Investissement(30, 5, 10);
    
        ...
            
        bouton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event) {
                String sBalance = textfield.toString();
                double balance = Double.valueOf(sBalance);
                /*
                 *  Mettre a jour la table ....
                 */
                model.setBalance( (int)balance ); // Pourquoi un double ?
            }
        });
    Enfin, il faut modifier la méthode setBalance() de ton modèle pour qu'il indique à ses listeners (la JTable) que ses données ont été modifiées.
    Dans ton cas la modification de la balance a un impact sur toutes les céllules, tu peut utiliser fireTableDataChanged() (voir la doc pour les autres cas).

    Ce qui pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public void setBalance(int b) {
            if (balance != b) {
                balance = b;
                fireTableDataChanged();
            }
        }
    a++

    PS : attention tu utilises des doubles et des ints pour balance. Pourquoi ?
    Et les noms de classes doivent commencer par une Majuscule

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 107
    Par défaut
    D'accord merci pour ton aide...
    je n'ai pas fait attention en faite entre mes double et int....

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

Discussions similaires

  1. [JTable] recuperer les donnees
    Par clemouf dans le forum Composants
    Réponses: 3
    Dernier message: 08/02/2019, 15h44
  2. Réponses: 6
    Dernier message: 08/07/2011, 16h22
  3. [Swing]JTable- Dimensionner les colonnes
    Par loutfi dans le forum Composants
    Réponses: 12
    Dernier message: 01/07/2011, 08h50
  4. [Swing / JTable] Rendre les cellules d'un JTable non éditables
    Par Jérôme_20 dans le forum Composants
    Réponses: 20
    Dernier message: 10/02/2011, 10h32
  5. [Swing]remplissage d'un JTable avec les vecteur
    Par 3adoula dans le forum Composants
    Réponses: 7
    Dernier message: 15/06/2004, 16h09

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