Afficher le résultat de la console, dans une fenetre a part
Fermé
khalous91
Messages postés18Date d'inscriptionmercredi 15 avril 2015StatutMembreDernière intervention17 juin 2015
-
27 avril 2015 à 10:24
Utilisateur anonyme -
27 avril 2015 à 16:20
Salut,
Alors j'aimerai afficher le résultat de ma " console" dans une JFrame à part.
Je me suis renseigné mais en vain... je sais que c'estun problème de flux mais comment y remédier ? :/
J'ai mes deux classes ci-dessous :
// On appelle la méthode de l'autre classe new Finally().traiterFichier(ZONE_B, ZONE_E, VALUE_B, VALUE_E, PATH); }
});
// mise en relation du bouton ok avec les deux autres groupeDeBoutons.add(btnOk); btnOk.setBounds(243, 228, 58, 23); contentPane.add(btnOk);
// Button "PARCOURIR"
JButton btnParcourir = new JButton("PARCOURIR"); btnParcourir.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { browseFile(); // sert au bouton PARCOURIR d'aller chercher un fichier x } });
// mise en relation du bouton PARCOURIR avec les deux autres groupeDeBoutons.add(btnParcourir); btnParcourir.setBounds(304, 56, 120, 23); contentPane.add(btnParcourir);
// Button "ANNULER"
JButton btnAnnuler = new JButton("ANNULER"); btnAnnuler.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } });
// mise en relation du bouton ANNULER avec les deux autres groupeDeBoutons.add(btnAnnuler); btnAnnuler.setBounds(311, 228, 113, 23); contentPane.add(btnAnnuler);
// On créer les composants de saisies .
zoneB = new JTextField("#>"); zoneB.setBounds(116, 112, 86, 20); contentPane.add(zoneB); zoneB.setColumns(10);
zoneE = new JTextField("#<"); zoneE.setBounds(116, 145, 86, 20); contentPane.add(zoneE); zoneE.setColumns(10);
valueB = new JTextField("{"); valueB.setBounds(116, 176, 86, 20); contentPane.add(valueB); valueB.setColumns(10);
valueE = new JTextField("}"); valueE.setBounds(116, 207, 86, 20); contentPane.add(valueE); valueE.setColumns(10);
JLabel lblNewLabel_1 = new JLabel("ZONE_B"); lblNewLabel_1.setBounds(10, 115, 73, 14); contentPane.add(lblNewLabel_1);
JLabel lblNewLabel_2 = new JLabel("VALUE_E"); lblNewLabel_2.setBounds(10, 210, 73, 14); contentPane.add(lblNewLabel_2);
JLabel lblNewLabel_3 = new JLabel("ZONE_E"); lblNewLabel_3.setBounds(10, 148, 73, 14); contentPane.add(lblNewLabel_3);
textField_4 = new JTextField(); textField_4.setBounds(10, 57, 192, 20); contentPane.add(textField_4); textField_4.setColumns(10);
}
private void browseFile() { JFileChooser fileChooser = new JFileChooser(); fileChooser.setDialogTitle("Choisir le fichier..."); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setMultiSelectionEnabled(false); if ( !textField_4.getText().isEmpty() ) { // faire bien attention : bien faire correspondre notre textField choisi, ici le textField_4 fileChooser.setSelectedFile(new File(zoneB.getText())); } // il y a plein d'autres méthodes pour customiser le composant (filtre sur les fichiers par exemple) : voir doc. if ( fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION ) { textField_4.setText( fileChooser.getSelectedFile().getAbsolutePath().toString() ); } }
public static final String ZONE_B = "#>"; // le début de la sous partie de texte à extraire public static final String ZONE_E = "#<"; // la fin de la sous partie de texte à extraire public static final String VALUE_B = "{"; // le début d'un mot à extraire public static final String VALUE_E = "}"; // la fin d'un mot à extraire public static final String PATH = "fichierCSH.txt"; // le nom du fichier par défaut lu
/* On peut passer un paramètre à la méthode main() :
le nom du fichier et s'il n'est pas spécifiée, on utilise PATH. * Cette méthode appelle d'abord extract() * puis split() et affiche les mots distincts trouvés */ public static void main(String[] args) { String path; if ( args.length>0 ) { path = args[0]; } else { path = PATH; } new Finally().traiterFichier(ZONE_B, ZONE_E, VALUE_B, VALUE_E, path); } public void traiterFichier(String zoneB, String zoneE, String valueB, String valueE, String filename) { String string = extract(filename, zoneB, zoneE); ArrayList<String> List = new ArrayList<String>(); if (string != null) { Collection<String> mots = split(string, valueB, valueE); for (String mot : mots) { //System.out.println(mot); } } else { System.out.println("Aucune chaine trouvée comprise entre " + zoneB + " et " + zoneE); } } /** * Lit le fichier spécifié et extrait la partie située entre ZONE_B et ZONE_E * @param filename nom du fichier * @return la chaîne extraite ou null si aucune chaîne trouvée, ou si le fichier n'existe pas */ private String extract(String filename, String ZONE_B, String ZONE_E) { try { StringBuilder stringBuilder = new StringBuilder(); BufferedReader buff = new BufferedReader(new FileReader(filename)); try { String line; while ((line = buff.readLine()) != null) { stringBuilder.append(line); stringBuilder.append('\n'); } } finally { buff.close(); } String toutLeFichier = stringBuilder.toString(); int a = toutLeFichier.indexOf(ZONE_B); int b = toutLeFichier.indexOf(ZONE_E); if (a >= 0 && b >= 0) { return toutLeFichier.substring(a + ZONE_B.length(), b); } } catch( FileNotFoundException e) { System.err.println("Fichier " + new File(filename).getAbsolutePath() + " introuvable"); } catch (IOException ioe) { System.err.println("Erreur --" + ioe.getMessage()); ioe.printStackTrace(); } return null; } /** * Extrait de la chaîne spécifiée la liste, sans doublons, des mots situés entre VALUE_B et VALUE_E * @param string la chaîne dont on doit extraire les mots * @return la liste de mots extraite */ private Collection<String> split(String string, String VALUE_B, String VALUE_E) { Collection<String> mots = new LinkedHashSet<>(); String[] tab = string.split("\n"); for (int i = 0; i < tab.length; i++) { //System.out.println(i + " : " + tab[i]); int index1 = tab[i].indexOf(VALUE_B); while (index1 >= 0) { int index2 = tab[i].indexOf(VALUE_E, index1); if (index2 >= 0) { int index3 = tab[i].lastIndexOf("{", index2); if (index3 != index1) { System.err.println("Problème dans le fichier : { non fermée en " + index1); } String x = tab[i].substring(index1 + 1, index2); mots.add(x); } else { System.err .println("Problème dans le fichier : { non fermée en " + index1); break; } index1 = tab[i].indexOf(VALUE_B, index2); } // fin de la boucle while } // fin de la boucle for return mots; } }
A voir également:
Afficher le résultat de la console, dans une fenetre a part
public JTextArea log;
// Fenêtre
public Console() {
JFrame f = new JFrame("Console");
log = new JTextArea();
f.setSize(800, 600);
f.add(log);
f.setVisible(true);
}
// Remplace System.out.printLn par prompt();
public void prompt(String msg) {
log.append(msg + "\n");
}
Après tu adaptes avec tes dimensions et tailles de texte :)
khalous91
Messages postés18Date d'inscriptionmercredi 15 avril 2015StatutMembreDernière intervention17 juin 2015 27 avril 2015 à 12:38
Merci MrYannKee ;)
J'ai essayer ton code et c'est presque parfait ^^
J'ai juste un petit problème lorsque j'appuie sur OK j'ai bien la fenetre qui s'ouvre avec le Jtextarea mais il n'y a rien dedans...
je te passe mes codes source, si tu as le temps jette y un coup d'oeil :
public Collection<String> Console() { JFrame f = new JFrame("Console"); JTextArea res = new JTextArea(); f.setSize(300, 300); f.add(res); f.setVisible(true);
return null; }
public JTextArea res;
public void prompt(String mot) { res.append(mot + "\n"); } }
// On appelle la méthode traiterFichier Collection<String> a1 = new LinkedHashSet<>(); a1 = new Console().Console();
for (String mot : a1) { //affichage System.out.println(mot); res.append(mot + "\n");
} }
});
// mise en relation du bouton ok avec les deux autres groupeDeBoutons.add(btnOk); btnOk.setBounds(243, 228, 58, 23); contentPane.add(btnOk);
// Button "PARCOURIR"
JButton btnParcourir = new JButton("PARCOURIR"); btnParcourir.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { browseFile(); // sert au bouton PARCOURIR d'aller chercher un fichier x } });
// mise en relation du bouton PARCOURIR avec les deux autres groupeDeBoutons.add(btnParcourir); btnParcourir.setBounds(304, 56, 120, 23); contentPane.add(btnParcourir);
// Button "ANNULER"
JButton btnAnnuler = new JButton("ANNULER"); btnAnnuler.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } });
// mise en relation du bouton ANNULER avec les deux autres groupeDeBoutons.add(btnAnnuler); btnAnnuler.setBounds(311, 228, 113, 23); contentPane.add(btnAnnuler);
// On créer les composants de saisies .
zoneB = new JTextField("#>"); zoneB.setBounds(116, 112, 86, 20); contentPane.add(zoneB); zoneB.setColumns(10);
zoneE = new JTextField("#<"); zoneE.setBounds(116, 145, 86, 20); contentPane.add(zoneE); zoneE.setColumns(10);
valueB = new JTextField("{"); valueB.setBounds(116, 176, 86, 20); contentPane.add(valueB); valueB.setColumns(10);
valueE = new JTextField("}"); valueE.setBounds(116, 207, 86, 20); contentPane.add(valueE); valueE.setColumns(10);
JLabel lblNewLabel_1 = new JLabel("ZONE_B"); lblNewLabel_1.setBounds(10, 115, 73, 14); contentPane.add(lblNewLabel_1);
JLabel lblNewLabel_2 = new JLabel("VALUE_E"); lblNewLabel_2.setBounds(10, 210, 73, 14); contentPane.add(lblNewLabel_2);
JLabel lblNewLabel_3 = new JLabel("ZONE_E"); lblNewLabel_3.setBounds(10, 148, 73, 14); contentPane.add(lblNewLabel_3);
textField_4 = new JTextField(); textField_4.setBounds(10, 57, 192, 20); contentPane.add(textField_4); textField_4.setColumns(10);
}
private void browseFile() { JFileChooser fileChooser = new JFileChooser(); fileChooser.setDialogTitle("Choisir le fichier..."); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setMultiSelectionEnabled(false); if ( !textField_4.getText().isEmpty() ) { // faire bien attention : bien faire correspondre notre textField choisi, ici le textField_4 fileChooser.setSelectedFile(new File(zoneB.getText())); } // il y a plein d'autres méthodes pour customiser le composant (filtre sur les fichiers par exemple) : voir doc. if ( fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION ) { textField_4.setText( fileChooser.getSelectedFile().getAbsolutePath().toString() ); } } }
public static final String ZONE_B = "#>"; // le début de la sous partie de texte à extraire public static final String ZONE_E = "#<"; // la fin de la sous partie de texte à extraire public static final String VALUE_B = "{"; // le début d'un mot à extraire public static final String VALUE_E = "}"; // la fin d'un mot à extraire public static final String PATH = "fichierCSH.txt"; // le nom du fichier par défaut lu
/* On peut passer un paramètre à la méthode main() :
le nom du fichier et s'il n'est pas spécifiée, on utilise PATH. * Cette méthode appelle d'abord extract() * puis split() et affiche les mots distincts trouvés */ public static void main(String[] args) { String path; if ( args.length>0 ) { path = args[0]; } else { path = PATH; } new Finally().traiterFichier(ZONE_B, ZONE_E, VALUE_B, VALUE_E, path); } public Collection<String> traiterFichier(String zoneB, String zoneE, String valueB, String valueE, String filename) { String string = extract(filename, zoneB, zoneE); Collection<String> mots = new LinkedHashSet<>(); if (string != null) { mots = split(string, valueB, valueE); } else { System.out.println("Aucune chaine trouvée comprise entre " + zoneB + " et " + zoneE); } return mots; } /** * Lit le fichier spécifié et extrait la partie située entre ZONE_B et ZONE_E * @param filename nom du fichier * @return la chaîne extraite ou null si aucune chaîne trouvée, ou si le fichier n'existe pas */ private String extract(String filename, String ZONE_B, String ZONE_E) { try { StringBuilder stringBuilder = new StringBuilder(); BufferedReader buff = new BufferedReader(new FileReader(filename)); try { String line; while ((line = buff.readLine()) != null) { stringBuilder.append(line); stringBuilder.append('\n'); } } finally { buff.close(); } String toutLeFichier = stringBuilder.toString(); int a = toutLeFichier.indexOf(ZONE_B); int b = toutLeFichier.indexOf(ZONE_E); if (a >= 0 && b >= 0) { return toutLeFichier.substring(a + ZONE_B.length(), b); } } catch( FileNotFoundException e) { System.err.println("Fichier " + new File(filename).getAbsolutePath() + " introuvable"); } catch (IOException ioe) { System.err.println("Erreur --" + ioe.getMessage()); ioe.printStackTrace(); } return null; } /** * Extrait de la chaîne spécifiée la liste, sans doublons, des mots situés entre VALUE_B et VALUE_E * @param string la chaîne dont on doit extraire les mots * @return la liste de mots extraite */ private Collection<String> split(String string, String VALUE_B, String VALUE_E) { Collection<String> mots = new LinkedHashSet<>(); String[] tab = string.split("\n"); for (int i = 0; i < tab.length; i++) { //System.out.println(i + " : " + tab[i]); int index1 = tab[i].indexOf(VALUE_B); while (index1 >= 0) { int index2 = tab[i].indexOf(VALUE_E, index1); if (index2 >= 0) { int index3 = tab[i].lastIndexOf("{", index2); if (index3 != index1) { System.err .println("Problème dans le fichier : { non fermée en " + index1); } String x = tab[i].substring(index1 + 1, index2); mots.add(x); } else { System.err .println("Problème dans le fichier : { non fermée en " + index1); break; } index1 = tab[i].indexOf(VALUE_B, index2); } // fin de la boucle while } // fin de la boucle for return mots; } }
que je t'ai donné au dessus et là ça devrai marcher (au lieu de
res.append(String);
)
khalous91
Messages postés18Date d'inscriptionmercredi 15 avril 2015StatutMembreDernière intervention17 juin 2015
>
Utilisateur anonyme
27 avril 2015 à 14:46
Re, j'ai fais ce que tu m'as dit mais rien ne s'affiche sur la JTextArea....
C'est bizarre... Là je vois pas où ça bloque désolé...
khalous91
Messages postés18Date d'inscriptionmercredi 15 avril 2015StatutMembreDernière intervention17 juin 2015
>
Utilisateur anonyme
27 avril 2015 à 14:56
27 avril 2015 à 12:38
J'ai essayer ton code et c'est presque parfait ^^
J'ai juste un petit problème lorsque j'appuie sur OK j'ai bien la fenetre qui s'ouvre avec le Jtextarea mais il n'y a rien dedans...
je te passe mes codes source, si tu as le temps jette y un coup d'oeil :
code console :
code SimpleFenetre :
code Finally :
thinks ;)
27 avril 2015 à 14:31
27 avril 2015 à 14:46
27 avril 2015 à 14:49
27 avril 2015 à 14:56