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

Collection et Stream Java Discussion :

Utilisation d'un tableau dans deux classes


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 113
    Points : 44
    Points
    44
    Par défaut Utilisation d'un tableau dans deux classes
    Bonjour,

    Je possède deux classes, dans une j'ai un tableau qui s'appele tabData et j'ai besoin de l'utiliser dans ma deuxième classe.

    Que dois je taper pour que ce tableau soit accessible dans les deux ?


    Merci beaucoup pour votre aide.

  2. #2
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Declare un des tableaux en public, tu instancies la classe qui l'utilise et tu poura l'utiliser.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 113
    Points : 44
    Points
    44
    Par défaut
    Étant un gros débutant de Java ...

    Qu'entend tu par "instancie la classe qui l'utilise" ?

    Merci

    EDIT : Public = statique ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 119
    Points : 192
    Points
    192
    Par défaut
    Instancier une classe, ça veut dire créer une instance (un object) de la classe.

    Public = public (oui je sais, c'est fou ^^).
    Les attributs d'une classe peuvent être soit privés (private = visible que de la classe), soit protégés (protected = visible que du package), soit publique (public = visible par tout le monde). Je te laisse trouver n'importe quel tutoriel ou cours sur java pour plus de détails.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Un petit exemple simple vaut mieux qu'un long discours:

    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
    public class Tableau {
     .... ce que tu veux!
    }
     
    public class Class1{
        private Tableau tableau;
        public Tableau getTableau(){
          return tableau;
        }
    }
    public class Class2 {
        private Class1 class1;
        public Class2(Class1 class1){
            this.class1=class1;
        }
        public void faireUnTrucAvecTableau(){
            this.class1.getTableau().faireUnTruc(); // Et voilà!
        }
    }
     
    public class Main {
        public static void main(String[] args){
            Class1 class1 = new Class1();
            Class2 class2 = new Class2(class1);
            class2.faireUnTrucAvecTableau();
        }
    }
    et non, public != static

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 113
    Points : 44
    Points
    44
    Par défaut
    Fonc j'ai intégré une nouvelle classe Tableau avec ce code :

    public class Tableau {
    short [] tabData ;
    }
    mais dans l'autre classe j'ai toujours une erreur il ne reconnait pas mon tableau Data... je sais je suis vraiment pas doué ^^

    Sinon dans ce tableau j'y insère des éléments dans ma première classe et dans ma deuxième j'ai besoin de les récupérer pour faire un graphique.

    Merci beaucoup

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    La classe tableau était un exemple, tu la remplace par ce que tu veux. Quand, dans ton exemple, accéder au tableau à l'intérieur de tableur, ca se fait de la meme manière que tu accède à class1 depuis class2, avec un getter.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 113
    Points : 44
    Points
    44
    Par défaut
    Je viens d'essayer mais je n'y arrive pas, je vais expliquer ce que j'ai fais exactement. Ma classe dans laquelle je rentre des données dans le tableau s'appelle MainjApplet.java et l'autre dans laquelle je récupère les données s'appelle Affichage.java.

    Tout d'abord j'ai créé une nouvelle classe appelée Tableau

    public class Tableau {
    short [] tabData = null;
    }
    Ensuite la partie que j'ai rajoutée dans ma classe MainjApplet

    public class MainjApplet extends JApplet {
    // ...
    private Tableau tabData;
    // ...
    public Tableau getTableau(){
    return tabData;
    }
    Et voici ce que j'ai rajouté dans la dernière classe ou se trouve le problème de lecture, Affichage
    public class Affichage{
    private MainjApplet mainjapplet;
    // ...
    public Affichage(MainjApplet mainjapplet){
    this.mainjapplet=mainjapplet;
    }

    public static void main(String[] args) {
    // create a dataset...
    XYSeries series = new XYSeries("Activités du cerveau");
    for (int i=0; i<tabData.length; i++) {
    series.add(tabData[i]);
    }
    // ...
    }
    }
    Voila en espérant avoir été clair... Merci beaucoup

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    dans ton cas, remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i=0; i<tabData.length; i++) {
    series.add(tabData[i]);
    }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i=0; i<mainjapplet.getTabData().length; i++) {
    series.add(mainjapplet.getTabData()[i]);
    }
    Par ce qu'il n'y a pas de raison que tabData apparaisse magiquement dans ta classe.

    et dans ton applet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class MainjApplet extends JApplet {
    // ...
    private short [] tabData;
    // ...
    public short [] getTabData(){
    return tabData;
    }
    Parce que, comme je l'ai dit, Tableau était juste un exemple, tu le rempalce par ce que tu veux.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 113
    Points : 44
    Points
    44
    Par défaut
    Alors j'ai cherché mais il me reste un dernier problème que je n'ai pas pu résoudre, à cette ligne :

    for (int i=0; i<mainjapplet.getTabData().length; i++) {
    series.add(mainjapplet.getTabData()[i]);
    }
    il me met en erreur :

    non-static variable mainjapplet cannot be referenced from a static context


  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut
    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
    public class Affichage{
    private static MainjApplet mainjapplet;
    // ...
    public Affichage(MainjApplet mainjapplet){
    this.mainjapplet=mainjapplet;
    }
    
    public static void main(String[] args) {
    // create a dataset...
    XYSeries series = new XYSeries("Activités du cerveau");
    for (int i=0; i<tabData.length; i++) {
    series.add(mainjapplet.getTabData()[i]);
    }
    // ...
    }
    }
    voila pour résoudre ton erreur de compilation
    mais tu devrais te renseigner sur la notion de static

    Toutes tes classes affichages vont avoir le même MainjApplet

    bon courage

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ton problème principal c'est "il viens d'ou ton mainJApplet. Soit tu le crée dans le main, alors utilise directement la variable de ta méthode main, soit tu ne le crée pas dans le main mais dans affichage, alors soit déplace ta boucle dans affichage là ou ca a du sens, soit tu met tu utilise l'instance d'affichage que tu possède dans le main (encore faut il une fois que t'en aie créée une) pour y accéder.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 113
    Points : 44
    Points
    44
    Par défaut
    Ok merci beaucoup, je viens de finir un tuto sur le static, je comprend mieux maintenant à quoi cela sert.

    Je vais copié tout mon code pour que se soit plus simple à la compréhension

    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
    import java.awt.*;
    import java.applet.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.*;
    import java.io.*;
    import jEDF.EDF.*; 
    
    public class MainjApplet extends JApplet {
    
        private EDFFile fileEdf;
        private EDFHeader edfHeader;
        private File file;
        private short [] tabData;
    
    
    
        /** Initializes the applet MainjApplet */
    
        public void init() {
            try {
                java.awt.EventQueue.invokeAndWait(new Runnable() {
                    public void run() {
                        initComponents();
                    }
                });
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    
    .........                      
    
        public void openEDFFile() {
    
            JFileChooser chooser = new JFileChooser();
    
            String[] extensions = {"rec", "hyp", "edf"};
    
            int returnVal = chooser.showOpenDialog(null);
    
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                openFile(chooser.getSelectedFile());
            }
        }
        
        public void openFile(File file) {
            
        	try {
                
                EDFFile edfFile = new EDFFile(file);
                int a=2;
                EDFSignal signal = edfFile.getSignal(a);
                tabData = signal.readSeconds(0, 5);
                
                for (int i=0; i<tabData.length; i++) {                
                    System.out.println (tabData[i]);
                } 
            }
            
            catch (IOException ex) {
            	Logger.getLogger(MainjApplet.class.getName()).log(Level.SEVERE, null, ex);
                }
    
            System.out.println("tab 0:"+tabData[0]);
            
        }
        
        public short [] getTabData(){
            return tabData;
        }
    
    
        
        private void OuvrirAction(java.awt.event.ActionEvent evt) {                              
            openEDFFile();
        }                             
    
        // Variables declaration - do not modify                     
        private javax.swing.JMenu jMenu1;
        private javax.swing.JMenuBar jMenuBar1;
        private javax.swing.JMenuItem jMenuItem1;
        private javax.swing.JPanel jPanel1;
        // End of variables declaration                   
        
    }
    et la deuxième classe :

    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
    package testjedf;
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartFrame;
    import org.jfree.chart.JFreeChart;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    
    public class Affichage {
        
        private static MainjApplet mainjapplet;
    
        public Affichage(MainjApplet mainjapplet){
            this.mainjapplet = mainjapplet;
        }
    
        private int[][] processData(short[] data, float xoffset, float yOffset,
    	float width, float height) {
    	int[][] tempResult = {new int[0], new int[0]};
    
    	if (data.length == 0) {
    		return tempResult;
    	}
    
            float abscissa = xoffset;
            int[] x = new int[data.length];
            int[] y = new int[data.length];
    
            float actualPoint = 0;
            float offset = (float) (height / 2.0);
            yOffset += offset;
    
    
            for (int i = 0; i < data.length; i++) {
    
                actualPoint -= offset;
                actualPoint += yOffset;
    
                y[i] = (int) actualPoint;
                x[i] = (int) abscissa;
    
    
            }
    
            int[][] series = {x, y};
    
            return series;
        }
            
        public static void load(String [] args) {
    
            // create a dataset...
    
    	XYSeries series = new XYSeries("Activités du cerveau");
            for (int i=0; i<mainjapplet.getTabData().length; i++) {
    
                series.add(i , mainjapplet.getTabData()[i]);
    
            } 
    	
    	XYDataset xyDataset = new XYSeriesCollection(series);
    	
            // create a line chart...
    	JFreeChart chart = ChartFactory.createXYLineChart(
    	"",  // Title
            "Temps",           // X-Axis label
            "Hz",           // Y-Axis label
            xyDataset,          // Dataset
            PlotOrientation.VERTICAL,
            true,true,false);
            
    	ChartFrame frame1=new ChartFrame("XYArea Chart",chart);
    	frame1.setVisible(true);
    	frame1.setSize(300,300);
    	 
            // create dot chart
            XYPlot xyplot = (XYPlot) chart.getPlot();
    	XYLineAndShapeRenderer xyLineAndShaperenderer = (XYLineAndShapeRenderer) xyplot.getRenderer();
    	xyLineAndShaperenderer.setShapesVisible(true);
    	xyLineAndShaperenderer.setShapesFilled(true);
    }
    }
    Voila il y a tout ! Maintenant que j'ai beaucoup de problèmes résolus il me reste plus qu'à partir du MainjApplet d'ouvrir l' Affichage.

    Encore merci pour votre aide... on me demande réaliser un programme en Java alors que je n'ai que de très maigres bases...

    EDIT : C'est bon mon problème est réglé !!! Merci à vous pour tout !!!

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

Discussions similaires

  1. C++/CLI : utilisation d'un tableau dans une class
    Par jlg_47 dans le forum C++/CLI
    Réponses: 3
    Dernier message: 07/01/2014, 16h21
  2. Réponses: 2
    Dernier message: 12/06/2011, 16h04
  3. utilisation d'un NotifyIcon dans deux class
    Par Woodone dans le forum ASP.NET
    Réponses: 1
    Dernier message: 13/01/2010, 09h03
  4. tableau dans une classe
    Par blastmanu dans le forum C++
    Réponses: 6
    Dernier message: 18/04/2006, 14h18
  5. [debutant] Utilisation de l'operateur = dans une classe
    Par Battosaiii dans le forum Débuter
    Réponses: 8
    Dernier message: 10/11/2005, 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