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.
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.
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
Étant un gros débutant de Java ...
Qu'entend tu par "instancie la classe qui l'utilise" ?
Merci
EDIT : Public = statique ?
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.
Un petit exemple simple vaut mieux qu'un long discours:
et non, public != static
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(); } }
Fonc j'ai intégré une nouvelle classe Tableau avec ce code :
mais dans l'autre classe j'ai toujours une erreur il ne reconnait pas mon tableau Data... je sais je suis vraiment pas doué ^^public class Tableau {
short [] tabData ;
}
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
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.
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
Ensuite la partie que j'ai rajoutée dans ma classe MainjAppletpublic class Tableau {
short [] tabData = null;
}
Et voici ce que j'ai rajouté dans la dernière classe ou se trouve le problème de lecture, Affichagepublic class MainjApplet extends JApplet {
// ...
private Tableau tabData;
// ...
public Tableau getTableau(){
return tabData;
}
Voila en espérant avoir été clair... Merci beaucouppublic 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]);
}
// ...
}
}
dans ton cas, remplace
par
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 ce qu'il n'y a pas de raison que tabData apparaisse magiquement dans ta classe.
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]); }
et dans ton applet:
Parce que, comme je l'ai dit, Tableau était juste un exemple, tu le rempalce par ce que tu veux.
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; }
Alors j'ai cherché mais il me reste un dernier problème que je n'ai pas pu résoudre, à cette ligne :
il me met en erreur :for (int i=0; i<mainjapplet.getTabData().length; i++) {
series.add(mainjapplet.getTabData()[i]);
}
non-static variable mainjapplet cannot be referenced from a static context
voila pour résoudre ton erreur de compilation
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]); } // ... } }
mais tu devrais te renseigner sur la notion de static
Toutes tes classes affichages vont avoir le même MainjApplet
bon courage
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.
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
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 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 }
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.
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); } }
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 !!!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager