relire un fichier FileReader BufferedReader - Java - Programmation
Marsh Posté le 09-09-2004 à 16:07:56
et file ? il sort d'ou ?
[dmc je sais]
Marsh Posté le 10-09-2004 à 10:59:19
mais la stacktrace complète.
je pense que ta variable file est null ... dans cette ligne, c'est la seule façon de générer une nullpointerexception
pour répondre à ta question, 2 solutions :
- recréer le FileReader
- lors de la premiere lecture, faire un marck sur le reader tout au début de la lecture avec un 'readAheadLimit' assez grand et faire un reset() au moment où tu veux refaire la lecture. Mais ca doit être assez consomateur en mémoire : ca garde tout le contenu du fichier que tu lis en mémoire ...
Marsh Posté le 10-09-2004 à 13:28:30
Pour etre plus clair, je met mon code complet, un peu gros, j'espère que vous vous y retrouverez... ( tests3 ne sert à rien pour l'instant pas fini)
Lorsque je relis le fichier (reset() il lis la première ligne "==titre==" puis me dis qu'à la ligne while (!texte.equals(findelentete){ il y a nullpointerexception
code:
// programme permettant de visualiser des courbes en utilisant un kit téléchargeable sur internet à l'adresse http://jcckit.sourceforge.net dans un répertoire machin, il faut ensuite, pour que le compilateur javac trouve les nouvelles classes, utiliser cet instruction dans la fenetre Xterm export CLASSPATH=/homes/votrenom/chemindaacces/JCCKit/jcckit.jar:$CLASSPATH ou pour ne plus à avoir réutiliser cet export, vous pouvez rajouter ce CLASSPATH dans le bashrc.
import javax.swing.*;
//import javax.swing.filechooser.*;
//import javax.swing.JOptionPane;
import javax.swing.JList;
import javax.swing.event.*;
import java.awt.geom.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseAdapter;
import java.awt.event.*;
//imprimer
import java.awt.print.PrinterJob;
import java.awt.print.*;
//import java.io.*;
import java.io.File;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.FileReader;
//import java.util.*;
import java.util.StringTokenizer;
import java.util.Properties;
import java.util.Vector;
import jcckit.data.DataPlot;
import jcckit.data.DataCurve;
import jcckit.data.DataPoint;
import jcckit.GraphicsPlotCanvas;
import jcckit.util.ConfigParameters;
import jcckit.util.PropertiesBasedConfigData;
import jcckit.transformation.CartesianTransformation;
import jcckit.plot.Legend;
class Logiciel12 extends JFrame implements ActionListener, ListSelectionListener, Printable{//ListSelectionModel {
final int VAa = 50000; // taille tab de lecture
final int VAo = 30;
final int Ta = 50000; // taille tab de graphe
final int To = 30;
JFileChooser fc = new JFileChooser(); //fenetre de choix fichier
File file;
// ------------- interface utilisateur --------------
// définition de la première ligne
JPanel row0 = new JPanel();
JLabel debutlabel = new JLabel("Bienvenue au LCP-GRAPHEUR : COURBES" );
// définition de la première ligne bis
JPanel row1b = new JPanel();
JTextField nomfichiereditable = new JTextField();
JButton okButton = new JButton("Choix du fichier" );
JButton okButton2 = new JButton("validez" );
// définition de la deuxième ligne
JPanel row2 = new JPanel();
JButton colonne = new JButton(" Colonne " );
JButton bloc = new JButton(" Bloc " );
// définition de la deuxième ligne bis
JPanel row2b = new JPanel();
JPanel row2ab = new JPanel();
JLabel labelfonction = new JLabel("fonction(s)" );//, JLabel.RIGHT);
JLabel labelbloc = new JLabel("fonction et bloc(s)" );//, JLabel.LEFT);
//JLabel nbcLabel = new JLabel(" Numéros des fonctions", JLabel.RIGHT);
JButton selectioncol = new JButton("Selectionnez" );
JTextField nbcourbe = new JTextField();//JTextField[] nbcourbes = new JTextField[0];
JTextField nbcourbes = new JTextField();
// définition de la deuxième ligne bis
JPanel row2bb = new JPanel();
JLabel blocLabel = new JLabel(" Numéros des blocs", JLabel.RIGHT);
JTextField blocde = new JTextField();
JTextField bloca = new JTextField();
// définition de la quatrième ligne
JPanel row4 = new JPanel();
JTextArea fichierarea = new JTextArea(5, 25);
JScrollPane scrollPane = new JScrollPane(fichierarea);
// définition de la cinquième ligne
JPanel row5 = new JPanel();
JButton imprime = new JButton("Imprimez l'interface" );
JButton reset = new JButton("Réinitialisez" );
// ------------- fin interface utilisateur --------------
Container pane = getContentPane();
JList liste;
DefaultListModel listModel = new DefaultListModel();
JList list = new JList(listModel);
DefaultListModel list2Model = new DefaultListModel();
JList list2 = new JList(list2Model);
DefaultListModel list3Model = new DefaultListModel();
JList list3 = new JList(list3Model);
// analyse syntaxique lecture fichier
String texte = ""; // lecture
String affiche = ""; // sur textarea
String it = ""; // mot "intermédiaire"
String enteteputative = "";
String debentete = "== titre ==";
String finentete = "== debut ==";
int a1 = 0;
int b1 = 0;
// entete du fichier
int ndim;
int nbcol;
int ind_x[] = {'0', '0', '0', '0'};
String sind_x;
int dim_x[] = {'0', '0', '0', '0'};
String label;//titre
String tlabel[] = new String[4];//initialisation du tableau
// probleme de memoire, choisir en fonction dimension 1 ou 2 du fichier une taille importante pour tplotabsc OU plotbloca
double va[][] = new double[VAa][VAo];// tab 2 dim data
double tplotabsc[] = new double[Ta];// val en abscisse
int lgtplotabsc = 0;
double tplotfonc[][] = new double[Ta][To];// val en ordonnées
int lgtplotfonc = 0; // lg effective (differente de zero) du tab pour UNE dimension
int indcommenceun = 1;
double plotbloca[][] = new double[Ta][To];//[3][10];//[Ta][To];
double plotbloco[][] = new double[Ta][To];//[3][10];//[Ta][To]
int a, de; // de col à col choix de la fonction
int debloc, abloc; // choix bloc
int k, i, j;// indice de boucle
String valeur = ""; // sous chaine pour analyse synthaxique
// coordonnées pour graphe
double maxabsc = 0;
double minabsc = 100;
double maxord = 0;
double minord = 100;
int jjj = 0;
int jjjb = 0;
DataPlot _dataPlot; // ensemble contenant plusieurs courbes
DataCurve curve = new DataCurve("" );// ens points pour former une courbe
GraphicsPlotCanvas plotCanvas;
double x; // coordonnées graphiques
double y;
Object choixcoloubloc;
int tselectioncol[] = new int[100]; int vrailengthtselectioncol = 0;
Frame frame = new Frame("graphe" );
int resetvariable = 0;
// ---------- lecture de l'entete du fichier ----------------------------
public void tests(File f) throws IOException {
BufferedReader li = new BufferedReader(new FileReader(f));
// il faut reconnaitre d'abords == titre ==
enteteputative = li.readLine();
if (enteteputative.equals(debentete)) {
System.out.println("titre conforme \n" + enteteputative);
// affiche conformité et entete titre
} else { System.out.println("titre non conforme \n" + enteteputative);
}
// connait pas le nb lignes on boucle tant que l'on ne lit pas == debut ==
while(!texte.equals(finentete))
{
texte = li.readLine();
//affiche = affiche + texte + "\n" + " " ;
//if (texte.equals(finentete)) { break;}
if (!texte.equals(finentete)) {
affiche = affiche + texte + "\n" + " " ;}
else { break;}
Traitement(texte);// appel fonction
System.out.println(texte);
}
// probleme phiadia2D ecrire 2* == debut ==? c'est pourquoi utilisation de while (2*)
fichierarea.append(" "+ affiche); //fichierarea.setText(" "+ affiche);
while(texte.equals(finentete)) {
System.out.println(finentete);
texte = li.readLine();
}
//okButton2.setEnabled(false);
} // fin void tests
// ---------- lecture de des nombres du fichier ----------------------------
public void tests1() throws IOException { // lecture que des col sel
BufferedReader li = new BufferedReader(new FileReader(file));
// il faut reconnaitre d'abords == titre ==
enteteputative = li.readLine();
if (enteteputative.equals(debentete)) {
System.out.println("titre conforme \n" + enteteputative);
// affiche conformité et entete titre
} else { System.out.println("titre non conforme \n" + enteteputative);
}
// connait pas le nb lignes on boucle tant que l'on ne lit pas == debut ==
while(!texte.equals(finentete))
{
texte = li.readLine();//fichierarea.setText("aa"+texte);
//affiche = affiche + texte + "\n" + " " ;
//fichierarea.setText(" "+ affiche);
if (texte.equals(finentete)) { break;}
System.out.println(texte);
}
// probleme phiadia2D ecrire 2* == debut ==? c'est pourquoi utilisation de while (2*)
while(texte.equals(finentete)) {
System.out.println(finentete);
texte = li.readLine();
}
// if (texte.equals(finentete)) {System.out.println(finentete);}
//texte = li.readLine(); si il y a écrit une fois == debut ==
while (texte != null){ // lire toutes les lignes
texte = li.readLine(); // une ligne
if (texte == null){ // pointer null
break;
}
StringTokenizer st = new StringTokenizer(texte, " " );
while (st.hasMoreTokens()) { // tant qu'il y a à lire sur la ligne
//while (selectioncol[b1] != 0){ // tant que le tab a valeur != 0
//while (dim_x[1] != nbcol){
while (b1 != nbcol) { // nos colonnes utilisateurs commence à 1
//System.out.println("vrailengthtselectioncol "+vrailengthtselectioncol);
it = st.nextToken(); // ici à zéro d'où !=
if (b1 == 0) va[a1][b1] = Double.parseDouble(it); // tjs stochkée absc 0
for (k = 0; k < vrailengthtselectioncol ; k++){
//System.out.println("b1 "+b1+" tselectioncol[k] "+ tselectioncol[k]);
if (b1 == tselectioncol[k]-1) {
va[a1][indcommenceun] = Double.parseDouble(it); //ttes absc, ord col selectionnée-1 car fichier commence à zéro et l'utilisateur à 1
indcommenceun++; // inc slt si bonne col
//System.out.println("b1 "+ b1+" tselectioncol[k] "+ tselectioncol[k]+ " a1 "+a1+" "+" indcommenceun "+indcommenceun+" "+va[a1][indcommenceun]);
}
}
b1++; // autre colonne suivante
}// fin while b1 != nbcol
//System.out.println("nb ligne dim "+ a1 +" nb col "+ b1);
b1 = 0; // revient première colonne prog "0" pr utilisateur "1"
indcommenceun = 1;
a1++; // incremente ligne
//}// while dim_x[1 != nbcol
} // fin while hasMoreToken
} // fin while texte!=null
//li.close(); // fermeture du bufferreader
a1 = a1 - 1; // vérification
//System.out.println(va[a1][b1]+it);
//okButton.setEnabled(false);
//okButton2.setEnabled(false);// une fois utilisé, devient inutilisable
}// fin tests2
//--------------- analyse de l'entete et stockage des données --------
public void tests2() throws IOException {
BufferedReader li = new BufferedReader(new FileReader(file));
enteteputative = li.readLine();
if (enteteputative.equals(debentete)) {
System.out.println("titre conforme \n" + enteteputative);
// affiche conformité et entete titre
} else { System.out.println("titre non conforme \n" + enteteputative);
}
// connait pas le nb lignes on boucle tant que l'on ne lit pas == debut ==
while(!texte.equals(finentete))
{
texte = li.readLine();//fichierarea.setText("aa"+texte);
//affiche = affiche + texte + "\n" + " " ;
////fichierarea.setText(" "+ affiche);
if (texte.equals(finentete)) { break;}
System.out.println(texte);
}
// probleme phiadia2D ecrire 2* == debut ==? c'est pourquoi utilisation de while (2*)
while(texte.equals(finentete)) {
System.out.println(finentete);
texte = li.readLine();
}
// if (texte.equals(finentete)) {System.out.println(finentete);}
//texte = li.readLine(); si il y a écrit une fois == debut ==
while (texte != null){ // lire toutes les lignes
texte = li.readLine(); // une ligne
if (texte == null){ // pointer null
break;
}
StringTokenizer st = new StringTokenizer(texte, " " );
while (st.hasMoreTokens()) { // tant qu'il y a à lire sur la ligne
while (b1 != nbcol) { // nos colonnes utilisateurs commence à 1
//System.out.println("vrailengthtselectioncol "+vrailengthtselectioncol);
it = st.nextToken(); // ici à zéro d'où !=
if (b1 == 0) va[a1][b1] = Double.parseDouble(it); // tjs stochkée absc 0
for (k = 0; k < vrailengthtselectioncol ; k++){
//System.out.println("b1 "+b1+" tselectioncol[k] "+ tselectioncol[k]);
if (b1 == tselectioncol[k]-1) {
va[a1][indcommenceun] = Double.parseDouble(it); //ttes absc, ord col selectionnée-1 car fichier commence à zéro et l'utilisateur à 1
indcommenceun++; // inc slt si bonne col
//System.out.println("b1 "+ b1+" tselectioncol[k] "+ tselectioncol[k]+ " a1 "+a1+" "+" indcommenceun "+indcommenceun+" "+va[a1][indcommenceun]);
}
}
b1++; // autre colonne suivante
}// fin while b1 != nbcol
//System.out.println("nb ligne dim "+ a1 +" nb col "+ b1);
b1 = 0; // revient première colonne prog "0" pr utilisateur "1"
indcommenceun = 1;
a1++; // incremente ligne
} // fin while hasMoreToken
} // fin while texte!=null
// li.close(); // fermeture du bufferreader
} // fin tests3
public void Traitement(String li) {
int pos = 0; // position du égale
String spefi = ""; // champ spécifique de l'entete
char c; // indices temporaire des ind_x et dim_x
pos = li.indexOf("=" );
if (pos != -1) {
if (pos < li.length()) {
int tailleli = li.length();// longueur de la ligne
//System.out.println(tailleli);
spefi = li.substring(0, pos-1);// sous chaine avant = ss espace
//System.out.println(spefi);
valeur = li.substring(pos+2, tailleli);//sous chaine ap=ssespac
//System.out.println(valeur);
if (spefi.equals("ndim" )) { // on a trouve ndim
ndim = Integer.parseInt(valeur);// converti ssch droite en int
}
else if (spefi.equals("nbcol" )) {
nbcol = Integer.parseInt(valeur);
}
else if (spefi.startsWith("ind_x" )) { // ssch commence par "
c = spefi.charAt(6);// recupere 7eme caractere 6+1
int intc = (int)c;// converti en int
intc = intc - 48; //char 'A';
ind_x[intc] = Integer.parseInt(valeur);
sind_x = Integer.toString(ind_x[intc]);
//System.out.println("ind_x(c) "+ ind_x[intc]);
}
else if (spefi.startsWith("dim_x" )) {
c = spefi.charAt(6);
int intc = (int)c;
intc = intc - 48;
dim_x[intc] = Integer.parseInt(valeur);
//System.out.println("dim_x("+ c +" )"+"="+ valeur);
}
else if (spefi.equals("label" )) {
label = valeur;
//System.out.println("label "+ label);
}
else if (spefi.startsWith("label(" )) {
c = spefi.charAt(6);
int intc = (int)c;
//System.out.println("c intc"+c+" "+intc);
intc = intc - 48;
//System.out.println("c= "+c+" "+intc);
tlabel[intc] = valeur;
//System.out.println("tlabel( "+ valeur);
}
} // FIN IF LI.LENGTH
} // FIN IF POS
// cohérence de l'entête
for (k = 0; k < 4; k++){
if (((ind_x[k]== 0) && (dim_x[k]!= 0))||((ind_x[k]!= 0)
&& (dim_x[k]== 0)))
System.out.println("L'entete de votre fichier est mal défini" );
}
} // fin Traitement de l'entete
// ================= Evenements =================================
public void actionPerformed(ActionEvent event) {
int colchoisi[] = new int[200]; // toutes col choisies
int ncolchoisi = 0; // nb total de col choisies
int jj = 0; int jjb = 0;
int aa = 0;
int bl = 0;
int nbabsc = 0;
int nbord = 0;
//int index[] = new int[30];
Object index[]= new Object[30];
Object index2[]= new Object[30];
Object source = event.getSource();
// ------------------------
if (source == okButton2){
file = new File("/net.users/homes/"+ nomfichiereditable.getText().trim());
if (file.exists()){
try {
tests(file);
}
catch (IOException e) {
System.out.println(e);
} }
if (ndim == 1){
for (k = nbcol; k > 2; k--){
listModel.insertElementAt(new Integer(k), 1);
list.setSelectedIndex(1);
list.ensureIndexIsVisible(1);
}
}
if (ndim == 2){
for (k = nbcol; k > 2; k--){
list2Model.insertElementAt(new Integer(k), 1);
list2.setSelectedIndex(1);
list2.ensureIndexIsVisible(1);
}
for (k = nbcol; k > 2; k--){
list3Model.insertElementAt(new Integer(k), 1);
list3.setSelectedIndex(1);
list3.ensureIndexIsVisible(1);
}
}
} // fin okButton2
// ------------------------
if (source == okButton){
if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
fichierarea.append("Opening: "+ file.getName()+ "\n" );
if (file.exists()){
try {
tests(file);
}
catch (IOException e) {
System.out.println(e);
} }
} // fin showopen
if (ndim == 1){
for (k = nbcol; k > 2; k--){
listModel.insertElementAt(new Integer(k), 1);
list.setSelectedIndex(1);
list.ensureIndexIsVisible(1);
}
}
if (ndim == 2){
for (k = nbcol; k > 2; k--){
list2Model.insertElementAt(new Integer(k), 1);
list2.setSelectedIndex(1);
list2.ensureIndexIsVisible(1);
}
for (k = nbcol; k > 2; k--){
list3Model.insertElementAt(new Integer(k), 1);
list3.setSelectedIndex(1);
list3.ensureIndexIsVisible(1);
}
}
} // fin source == okButton
// ------------------------
if (source == selectioncol){
if (ndim == 1){
list2.setEnabled(false);
list2.setOpaque(true);
list3.setEnabled(false);
list3.setOpaque(true);
index = list.getSelectedValues();
for (k = 0; k < index.length ; k++){
tselectioncol[k] = ((Integer)index[k]).intValue();
}
} else if (ndim == 2){
list.setEnabled(false);
list.setOpaque(true);
index2 = list.getSelectedValues();
for (k = 0; k < index2.length ; k++){
tselectioncol[k] = ((Integer)index2[k]).intValue();
}
}
//index[aa] = list.getSelectedIndex();
//index = list.getSelectedIndices();
//fichierarea.append("tselectioncol[k] "+ tselectioncol[k]);
for (j = 0; j < tselectioncol.length; j++){
if (tselectioncol[j] != 0) vrailengthtselectioncol++;
}
//for (k = 0; k < vrailengthtselectioncol ; k++){
//fichierarea.append(tselectioncol[k] + " " );}
// -------------- lecture des points souhaités -------
if (ndim == 1){
try {tests1();} // methode suite lecture fichier que col selection
catch (IOException e) {System.out.println(e);}
}
if (ndim == 2){
try {tests2();} // methode suite lecture fichier que col selection
catch (IOException e) {System.out.println(e);}
}
// -----------------------------------------------
//if (source == colonne){ //tselectioncol[k] doit etre connu
choixcoloubloc = colonne;
de = Integer.parseInt("0"+ nbcourbe.getText());
a = Integer.parseInt("0"+ nbcourbes.getText());
nbcourbe.setText("" + de);
nbcourbes.setText("" + a);
//snbcol = Integer.toString(nbcol-1);
// avertissement si en dehors, choisir la bonne colonne
JOptionPane avert = new JOptionPane();
//if ( (de < 2 || de > nbcol-1 || a < 2 || a > nbcol-1) ) {
// ----- vérifier que les colonnes sélectionnées coérentes
if (tselectioncol[0]< 2 || tselectioncol[0]> nbcol || tselectioncol[vrailengthtselectioncol-1]< 2 || tselectioncol[vrailengthtselectioncol-1]>nbcol){
avert.showMessageDialog(null, "entrer des valeurs comprises entre 2 et nbcol", "Avertissement", JOptionPane.WARNING_MESSAGE);
}
// ----- suivant la dimension du fichier nb valeur varient
if (ndim == 1){
nbabsc = dim_x[1];
nbord = dim_x[1];
}//fin if dim = 1
if (ndim == 2){
nbabsc = dim_x[1]*dim_x[2];
nbord = dim_x[1]*dim_x[2];
}//fin if dim = 2
if (ndim == 3){ // inutile
nbabsc = dim_x[1]*dim_x[2]*dim_x[3];
nbord = dim_x[1]*dim_x[2]*dim_x[3];
}//fin if dim = 3
// ------------- col des abscisses --------------
for (k = 0; k < nbabsc ; k=k+2){//k=k+2 économie memoire
for (j = 0;{
tplotabsc[aa] = va[k][j];
//System.out.println("tplotabsc[] aa "+aa+" "+ tplotabsc[aa]);
break;
}
aa++;
}
for (k = 0; k < aa ; k++){
if (tplotabsc[k] != 0) lgtplotabsc++;
}
System.out.println(" lgtplotabsc "+ lgtplotabsc);// 0 62 =63
aa = 0; // réutilisé
//System.out.println(" de "+ de +" a "+ a);
// ------------ col des ordonnées ----------------
for (k = 0; k < nbord ; k=k+2){ // tes les abscisses pr fichier 2 dim dim(1)*dim(2)
//for (j = de; j < a + 1; j++){
//for (j = 0; j < vrailengthtselectioncol; j++){ // tselectioncol.length; j++){
// i = tselectioncol[j]-1;// attention nos col(lecture fichier commenc à 0)
for (j = 1; j < vrailengthtselectioncol+1; j++){
tplotfonc[aa][jj] = va[k][j];//stocke la bonnecol
//System.out.println("tplotfonc[][] "
//+ aa +" jj "+ jj +" "+ tplotfonc[aa][jj]);
jj++; // autre colonnne System.out.println(" jj "+ jj);
}
aa++; // autre abscisse
jjj = jj; // total colonne + 1
jj = 0; // col retourne zero
} // fin ttes les abscisses
//System.out.println(" jjj "+ jjj);
for (k = 0; k < aa ; k++){// sert à rien
if (k != 0) lgtplotfonc++; // retire valeur égale zero
}
//System.out.println("tplotfonc[aa-2][de] "
//+ (aa-1) +" "+ (i) +" "+ tplotfonc[aa-2][de]);
//System.out.println("lgtplotfonc " + lgtplotfonc);
//----------------- max et min pr graphe ---------------
for (i = 0; i < lgtplotabsc ; i++){ // pas nbabsc car tab pas rempli dc 0 min
if (tplotabsc[i] > maxabsc) maxabsc = tplotabsc[i];
if (tplotabsc[i] < minabsc) minabsc = tplotabsc[i];
}
//System.out.println(" ici minabsc "+ minabsc + " maxabsc "+ maxabsc +" "+ jjj);
for (i = 0; i < lgtplotabsc ; i++){
for (j = 0; j < jjj; j++){
if (tplotfonc[i][j]> maxord) maxord = tplotfonc[i][j];
if (tplotfonc[i][j]< minord) minord = tplotfonc[i][j];
//System.out.println(" for minabsc "+ minabsc + " maxabsc "+ maxabsc);
}
}
//System.out.println(" ici minord "+ minord +" maxord "+ maxord);
nit();// appel methode pr nouvelle fen graphique jcckit
//} // fin if source == colonne
} // fin source == selectioncol
//-------------------------
if (source == bloc){ // pour réinitialiser la courbe
choixcoloubloc = bloc;
aa = 0;
lgtplotabsc = 0;
//fichierarea.append("de "+ tselectioncol[k] + "a " );
// text bloc
debloc = Integer.parseInt("0"+ blocde.getText());
abloc = Integer.parseInt("0"+ bloca.getText());
blocde.setText("" + debloc);
bloca.setText("" + abloc);
// text fonction, choisir une seule fonction
de = Integer.parseInt("0"+ nbcourbe.getText());
a = Integer.parseInt("0"+ nbcourbes.getText());
nbcourbe.setText("" + de);
nbcourbes.setText("" + a);
if (ndim == 2){
nbabsc = dim_x[2];
nbord = dim_x[1]*dim_x[2];
}// fin if dim = 2
// --------------------------- absc -----------
for (i = debloc; i < abloc+1; i++){ // prends bloc choisis
for (k = 0; k < nbabsc ; k++){ // prends ttes val de la dim 2
for (j = 1;{ // prends une valeur de la col 0
plotbloca[aa][bl] = va[(k+1)*(i-1)][j];
//System.out.println("ptb[] aa "+aa+" "+ plotbloca[aa][bl]);
break;
}
jjb = aa++;
}
aa = 0;
bl++;
}
for (k = 0; k < jjb; k++){
// for (j = 0; ; ){
if (plotbloca[k][0] != 0) lgtplotabsc++;
}
//System.out.println("lgtplotabsc "+ lgtplotabsc+ " "+ bl );
// --------------- max et min pr graphe ---------------
for (i = 0; i < lgtplotabsc; i++){
for (j = 0; j < bl ; j++){
if (plotbloca[i][j] > maxabsc) maxabsc = plotbloca[i][j];
if (plotbloca[i][j] < minabsc) minabsc = plotbloca[i][j];
}
//System.out.println("tb[aa" );
}
//System.out.println("minabsc "+ minabsc+" maxabsc "+ maxabsc);
aa = 0; // réutilisé
bl = 0;
// ------------ ordonnées ---------------
for (i = debloc; i < abloc+1; i++){ // prends bloc choisis
for (k = 0; k < nbabsc; k++){ // prends ttes val de la dim 2
for (j = de;{ // prends une valeur de la col 0
plotbloco[k][bl] = va[(k+1)*(i-1)][j];// k+1 i-1 à cause zero
//System.out.println("plotb[de][bl]" "+ plotb[de][bl]);
break;
}
}
bl++;
}
jjjb = bl;
//System.out.println("tplotfonc[aa-2][de] "
//+ (aa-1) +" "+ (i) +" "+ tplotfonc[aa-2][de]);
//System.out.println("lgtplotfonc " + lgtplotfonc);
for (j = 0; j < nbabsc; j++){
for (k = 0; k < jjjb; k++){
if (plotbloco[j][k]> maxord) maxord = plotbloco[j][k];
if (plotbloco[j][k]< minord) minord = plotbloco[j][k];
}
}
//System.out.println("minord "+ minord +" maxord "+ maxord);
nit();// appel methode pr nouvelle fen graphique jcckit
}// fin if source == bloc
// ------------------------
if (source == imprime){ //
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(Logiciel12.this);
if (printJob.printDialog()) {
try {
printJob.print();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
// ------------------------
if (source == reset){ // relecture de mon fichier
try{ tests2();}//tests2();}
catch (IOException e) {System.out.println(e); }
resetvariable = 1;
nit();
}// fin(source == reset)
}//--------------- /////// fin methode actionPerformed()
public int print(Graphics g, PageFormat pf, int pi) throws PrinterException {
if (pi >= 1) {
return Printable.NO_SUCH_PAGE;
}
//drawShapes();
//Graphics2D g2 = (Graphics2D) g;
//Graphics2D plotCanvas = (Graphics2D) g;
final Dimension dimension = pane.getSize();
final double scaleX = pf.getImageableWidth() / dimension.width;
final double scaleY = pf.getImageableHeight() / dimension.height;
final double scale = Math.min(scaleX, scaleY);
final Graphics2D g2 = (Graphics2D)g;
g2.translate(pf.getImageableX(), pf.getImageableY());
//g2.scale(scale, scale);
pane.paint(g2);
//frame.paint(g2);
return Printable.PAGE_EXISTS;
}
public void drawShapes(){
}
// ==========================================================-
//-----------------------------------------------------
// ----------- jcckit ------------------
public void nit(){
//Frame frame = new Frame("graphe" );
JTextField autre = new JTextField("fichier "+ file.getName()+
" titre "+ label);
//GraphicsPlotCanvas plotCanvas = createPlotCanvas();
plotCanvas = createPlotCanvas();
_dataPlot = new DataPlot();
_dataPlot.addElement(new DataCurve("" ));
plotCanvas.connect(_dataPlot);
getContentPane().setLayout(new BorderLayout());
frame.add(autre, BorderLayout.NORTH);
frame.add(plotCanvas.getGraphicsCanvas(), BorderLayout.CENTER );
//if (choixcoloubloc == colonne){
frame.add(createControlPanel(), BorderLayout.SOUTH);//}
//else {frame.add(createControlPanel2(), BorderLayout.SOUTH);}
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
frame.dispose();//System.exit(0);
}
});
frame.addWindowListener(new WindowAdapter() {
public void windowDesactivated(WindowEvent event) {
//_dataPlot.replaceElementAt(0, curve);
}
});
frame.setSize(500, 500);
frame.setLocation(500, 100);
frame.setVisible(true);
}
private Panel createControlPanel() {
Panel controlPanel = new Panel();
Button startButton = new Button("tracer" );
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (j = 0; j < jjj; j++){
//System.out.println("ds createControlPanel boucle for de a" );
DataCurve curve = new DataCurve(""+ tselectioncol[j]);// nouvelle courbe àchaque nouvelle colonne
for (k = 0; k < lgtplotabsc; k++){// ajout ts les abcs
x = tplotabsc[k];
y = tplotfonc[k][j];
curve.addElement(new DataPoint(x, y));
}
_dataPlot.addElement(curve);// ajout de cette courbe au plot
}
}// fin actionPerformed
}); // fin startButton.addActionListener
//startButton.setEnabled(true);???
controlPanel.add(startButton);
return controlPanel;
}
private Panel createControlPanel2() { // pour fichier 2 dimension
Panel controlPanel = new Panel();
System.out.println("on est ds createControlPanel2()" );
Button startButton = new Button("tracer" );
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (j = 0; j < jjjb; j++){ // bloc
System.out.println("ds createControlPanel bloc" );
DataCurve curve = new DataCurve("" );// nouvelle courbe àchaque nouvelle colonne
for (k = 0; k < lgtplotabsc; k++){//
x = plotbloca[k][j];
y = plotbloco[de][j];
curve.addElement(new DataPoint(x, y));
}
_dataPlot.addElement(curve);// ajout de cette courbe au plot
}
}// fin actionPerformed
}); // fin startButton.addActionListener
controlPanel.add(startButton);
return controlPanel;
}
private GraphicsPlotCanvas createPlotCanvas() {
Properties props = new Properties();
ConfigParameters config = new ConfigParameters(new PropertiesBasedConfigData(props));
props.put("plot/legendVisible", "true" );
props.put("plot/legend/curveTitleAttributes"," 0.01 " );// entre lignes legendes
props.put("plot/legend/curveTitleDistance"," 0.02 " );// entre bord et lignes
props.put("plot/legend/leftDistance", "0.015 " );
props.put("plot/legend/symbolSize", " 0.0005" );
props.put("plot/legend/boxWidth","0.15" );
props.put("plot/legend/boxHeight"," 0.25" );
//props.put("plot/curveFactory/curve/legendSymbol","" );
props.put("plot/legend/title","Légendes" );
//props.put("foreground", "#996699" );//0xffffff" );bleu
props.put("background", "#FFFFFF" );//blanc "#00FFCC" );// jaune clair
//props.put("plot/title", label);
//props.put("defaultAxisParameters/ticLabelFormat", "%d" );
//props.put("defaultAxisParameters/ticLabelAttributes/fontSize"," 0.03" );
//props.put("defaultAxisParameters/axisLabelAttributes/textColor"," 0xa0" );
//props.put("defaultAxisParameters/axisLabelAttributes/fontSize","0.04" );
props.put("AxisParameters/axisLabelAttributes/fontStyle"," bold" );
props.put("plot/coordinateSystem/xAxis/ticLabelFormat", "%d" );//0.05d" );
props.put("plot/coordinateSystem/yAxis/ticLabelFormat", "%1.2f" );
props.put("plot/coordinateSystem/xAxis/minimum", Double.toString(minabsc));
props.put("plot/coordinateSystem/xAxis/maximum", Double.toString(maxabsc));
props.put("plot/coordinateSystem/yAxis/minimum", Double.toString(minord));
props.put("plot/coordinateSystem/yAxis/maximum", Double.toString(maxord));
//props.put("plot/initialHintForNextCurve/position", "0 0.1" );
props.put("plot/coordinateSystem/yAxis/axisLabel", "f(x)" );
props.put("plot/coordinateSystem/xAxis/axisLabel", "x" );
//System.out.println("ds creategraphics minord "+ minord+" maxord "+maxord);
return new GraphicsPlotCanvas(config);
}
// ------- methode sert à rien mais doit etre defini pour implement
public void valueChanged(ListSelectionEvent e) {
//System.out.println("deeee" ); if (list.getSelectedIndex() == -1) {
//No selection, disable fire button.
okButton.setEnabled(false);
if (okButton == e.getSource()){}
}
//public void getLeadSelectionIndex(){
//}
public void constructeur(){
setTitle("LCP GRAPHEUR" );
setSize(400, 550);
setLocation(100,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout layout = new GridLayout(7, 1, 1, 1);
pane.setLayout(layout);
FlowLayout layout0 = new FlowLayout(FlowLayout.CENTER);// titre
row0.setLayout(layout0);
row0.add(debutlabel);
debutlabel.setBackground(new Color(250, 150, 020)); // rien
pane.add(row0);
FlowLayout layout1b = new FlowLayout(FlowLayout.CENTER);//12,0);
row1b.setLayout(layout1b);
row1b.add(nomfichiereditable);
row1b.add(okButton2);
row1b.add(okButton);
nomfichiereditable.setEditable(true);
nomfichiereditable.setPreferredSize(new Dimension(110, 30));
okButton.setFocusPainted(false);// cadre autour nom
okButton.setBorder(BorderFactory.createRaisedBevelBorder());// relief
okButton.setPreferredSize(new Dimension(110, 30));
okButton.setBackground(new Color(100, 220, 240));
okButton.setEnabled(true);
okButton2.setFocusPainted(false);// cadre autour nom
okButton2.setBorder(BorderFactory.createRaisedBevelBorder());// relief
okButton2.setPreferredSize(new Dimension(50, 30));
okButton2.setEnabled(true);
okButton2.setBackground(new Color(100, 220, 240));
pane.add(row1b);
FlowLayout layout2ab = new FlowLayout(FlowLayout.CENTER);//1, 2, 5, 2);
row2ab.setLayout(layout2ab);
row2ab.add(labelfonction);row2ab.add(labelbloc);
pane.add(row2ab);
FlowLayout layout2b = new FlowLayout(FlowLayout.CENTER);//1, 2, 5, 2);
row2b.setLayout(layout2b);
listModel.addElement(new Integer(2));
list = new JList(listModel);
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
list.setSelectedIndex(0);
list.addListSelectionListener(this);
list.setVisibleRowCount(6);
list2Model.addElement(new Integer(2));
list2 = new JList(list2Model);
list2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list2.setSelectedIndex(0);
list2.addListSelectionListener(this);
list2.setVisibleRowCount(6);
list3Model.addElement(new Integer(2));
list3 = new JList(list3Model);
list3.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
list3.setSelectedIndex(0);
list3.addListSelectionListener(this);
list3.setVisibleRowCount(6);
JScrollPane scrollliste = new JScrollPane(list);
JScrollPane scrollliste2 = new JScrollPane(list2);
JScrollPane scrollliste3 = new JScrollPane(list3);
scrollliste.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollliste2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollliste3.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollliste.setPreferredSize(new Dimension(55, 70));
scrollliste2.setPreferredSize(new Dimension(55, 70));
scrollliste3.setPreferredSize(new Dimension(55, 70));
row2b.add(scrollliste);
row2b.add(scrollliste2);
row2b.add(scrollliste3);
//row2b.add(nbcourbes);
pane.add(row2b);
// caractérisation de la deuxième ligne bisbis
FlowLayout layout2bb = new FlowLayout(FlowLayout.CENTER,0, 2);//(1, 3, 5, 2);
row2bb.add(selectioncol);
selectioncol.setFocusPainted(false);
selectioncol.setBorder(BorderFactory.createRaisedBevelBorder());
selectioncol.setBackground(new Color(050, 240, 220));
selectioncol.setPreferredSize(new Dimension(120, 30));
//row2bb.setLayout(layout2bb);
//row2bb.add(blocLabel);
//row2bb.add(blocde);
//row2bb.add(bloca);
pane.add(row2bb);
FlowLayout layout2 = new FlowLayout(FlowLayout.CENTER,0, 2);
//row2.setLayout(layout2);
//row2.add(colonne);
//row2.add(bloc);
colonne.setFocusPainted(false);// cadre autour nom
colonne.setBackground(new Color(050, 240, 220));
bloc.setFocusPainted(false);
bloc.setBackground(new Color(050, 240, 220));
colonne.setBorder(BorderFactory.createRaisedBevelBorder());// relief
bloc.setBorder(BorderFactory.createRaisedBevelBorder());
colonne.setPreferredSize(new Dimension(70, 30));
bloc.setPreferredSize(new Dimension(70, 30));
//pane.add(row2);
FlowLayout layout4 = new FlowLayout(FlowLayout.CENTER,0, 2);
row4.setLayout(layout4);
row4.add(scrollPane);//fichierarea);
fichierarea.setEditable(false);//zone text pr afficher slt
scrollPane.setPreferredSize(new Dimension(170, 80));
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
//scrollliste.createV(JScrollPane.SCROLLBARS_ALWAYS);
//scrollPane.addLayoutComponent(JScrollPane.ROW_HEADER);
pane.add(row4);
FlowLayout layout5 = new FlowLayout(FlowLayout.CENTER);
row5.setLayout(layout5);
row5.add(imprime);
imprime.setBackground(new Color(050, 240, 220));
imprime.setFocusPainted(false);
imprime.setPreferredSize(new Dimension(135, 30));
imprime.setBorder(BorderFactory.createEtchedBorder());
row5.add(reset);
reset.setBackground(new Color(050, 240, 220));
reset.setFocusPainted(false);
reset.setPreferredSize(new Dimension(135, 30));
reset.setBorder(BorderFactory.createEtchedBorder());
pane.add(row5);
// instruction générale au conteneur
pane.setBackground(Color.WHITE);
setContentPane(pane);
setVisible(true);
// ajout des auditeurs
okButton.addActionListener(this);
okButton2.addActionListener(this);
selectioncol.addActionListener(this);
colonne.addActionListener(this);
bloc.addActionListener(this);
imprime.addActionListener(this);
reset.addActionListener(this);
}
// ======= Constructeur de fenetre principale ========================
Logiciel12() {
super();
constructeur();
}// fin du constructeur de la fenetre principale
public static void main(String[] argv) {
Logiciel12 ba = new Logiciel12();
} // fin main
} // fin classe Logiciel10
fin code
Marsh Posté le 10-09-2004 à 15:13:44
désolé, moi j'ai pas le courage de me taper 20 écrans de code pour un problème aussi basic ...
t'exagère un peu là ...
Marsh Posté le 10-09-2004 à 15:20:23
benou a écrit : désolé, moi j'ai pas le courage de me taper 20 écrans de code pour un problème aussi basic ... |
23
Marsh Posté le 10-09-2004 à 15:33:10
ReplyMarsh Posté le 10-09-2004 à 15:41:13
ah bon c'était que ce soit plus clair, il suffit de regarder que les méthodes intéressantes ..., je crois que j'ai trouvé ma stupide erreur, je maitrise pas encore le java..(pas dut out)......
texte (string) pointe vers null, je l'ai pas réinitialisé
1024*768 comprends pas? il ya plein termes que je ne comprends pas encore.
Marsh Posté le 10-09-2004 à 16:45:22
puisqueturepondspas a écrit : |
Marsh Posté le 10-09-2004 à 17:32:15
han !
y'en a qu'ont honte de rien
Marsh Posté le 10-09-2004 à 17:35:10
Reply
Marsh Posté le 09-09-2004 à 16:05:54
bonjour!
savez vous comment faire pour relire entièrement un fichier que j'ai déjà lu entièrement avec BufferedReader li = new BufferedReader(new FileReader(file));
j'ai comme erreur : java.lang.NullPointerException
Faut t il utiliser une autre classe à accès direct?
merci