begin process at 2010 02 10 06:02:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Applets

 > 

Perdue dans la syntaxe JTextPane et html


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Perdue dans la syntaxe JTextPane et html

jeudi 20 mars 2008 à 16:51:19 | Perdue dans la syntaxe JTextPane et html

Fridimette

Bonjour,
Je bosse en ce moment sur un File Printer en java : j'ai des parties fixes et donc j'utilise du code HTML pour la mise en forme => donc oui JTextPane est mon ami !
Cependant, j'ai cherché comment ouvrir une page en  .html dans mon petit programme java et l'afficher sans les balises (cad comme dans un web browser): mais là je suis perdue !
Je vous envois les parties cruciales de mon code:

--> début code :
publicclass FileAfficher extends JFrame {
private JTextPane texte;
privateboolean texteModifie = false;
private String reponse;

publicstaticvoid main(String[] args){
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
new FileAfficher();
}
 
FileAfficher(){
super("File Printer");
setSize(new Dimension(800, 800));
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter(){
publicvoid windowClosing(WindowEvent evt){
quitter();
}
});
 
texte = new JTextPane();
 
texte.setContentType("text/html");
HTMLEditorKit k = new HTMLEditorKit();
HTMLDocument doc = (HTMLDocument)k.createDefaultDocument();
texte.setEditorKit(k);
texte.setDocument(doc);
 
//texte.setFont(new Font("Monospaced", Font.PLAIN, 12));
texte.setBackground(Color.WHITE);
texte.addKeyListener(new KeyAdapter(){
publicvoid keyTyped(KeyEvent evt){
texteModifie = true;
}
});
 
getContentPane().add(new JScrollPane(texte));
setJMenuBar(barreMenus());
setVisible(true);
}
 
private JMenuBar barreMenus(){
[...]
menu.addSeparator();
JMenuItem information = new JMenuItem("Information");
menu.add(information);
information.addActionListener(new ActionListener(){
publicvoid actionPerformed(ActionEvent e){
reponse = JOptionPane.showInputDialog("Nom du centre hospitalier?");
try{
FicheRecapi(reponse);
texteModifie =true;
}catch(IOException e1){
// TODO Auto-generated catch block
e1.printStackTrace();
}

}
});
 
return barre;
}
privatevoid FicheRecapi(String reponse)throws IOException{
 
String[] initString =
{/* ... fill array with initial text ...*/};
 
Style defaut = texte.getStyle("default");
Style as = texte.addStyle("stylePerso",defaut);

//SimpleAttributeSet as = new SimpleAttributeSet();
StyleConstants.setFontFamily(as, "Monospaced");
StyleConstants.setFontSize(as, 20);
StyleConstants.setAlignment(as, 1);
 
StyledDocument doc = texte.getStyledDocument();
 
//Load the text pane with styled text.
try{

//insertion de l'entête de la Fiche Récapitulative qui reste inchangée
//texte.insertIcon(new ImageIcon("logo_biotech.jpg"));

String file ="/home/fripette/Desktop/FilePrinter/enteteFicheRecap.html";
FileReader enteteFicheRecap= new FileReader(file);

doc.insertString(doc.getLength(),String.valueOf(enteteFicheRecap),as);


/**concernant la partie variable de cette Fiche
for (int i=0; i < initString.length; i++) {
doc.insertString(doc.getLength(), initString[i],as);
}**/

 
 
//insertion de la fin de la Fiche Récapitulative qui reste inchangée
String filename ="/home/fripette/Desktop/FilePrinter/finFicheRecap.html";
FileReader finFichRecap= new FileReader(filename);
doc.insertString(doc.getLength(),String.valueOf(finFichRecap),as);
//doc.getStyle(as));

}
catch(BadLocationException ble){
System.err.println("Couldn't insert initial text into text pane.");
}
}
 
}
 


--> Fin du code.

A quoi servent les lignes suivantes :
Style defaut = texte.getStyle("default");
Style as = texte.addStyle("stylePerso",defaut);

//SimpleAttributeSet as = new SimpleAttributeSet();
StyleConstants.setFontFamily(as, "Monospaced");
StyleConstants.setFontSize(as, 20);
StyleConstants.setAlignment(as, 1);
 
StyledDocument doc = texte.getStyledDocument();

en effet j'ai précisé au début :
HTMLEditorKit k = new HTMLEditorKit();    	
HTMLDocument doc = (HTMLDocument)k.createDefaultDocument();
 et je pensais que c'était suffisant mais je retrouve à chaque fois le StyledDocument !

Enfin : comment ajouter la page que j'ai génére dans le JTextPane : parce que partout ce que je lis (peut etre que je lis mal voir sans aucun doute):
ils ajoutent le HTML dans le StyledDocument doc grâce à la méthode insertString.
mais chez moi ca marche pas!

En gros, au vu de mon code, quel est l'étape juste apres pour afficher la page html dans le JtextPane si la méthode insertString n'est pas la bonne.

Merci beaucoup pour votre aide parce que je suis vraiment perdue !
vendredi 21 mars 2008 à 12:38:18 | Re : Perdue dans la syntaxe JTextPane et html

Fridimette

Bon petite évolution :
mon nouveau soucis : le remplissage de mon JTextPane ne se fait pas dans la même dans le main (endroit de la définition/l'initialisation de mon JTextPane)
En effet, en fonction des selections de l'utilisateur dans la barre de Menu: la page hmtl appropriée va se charger dans le JTextPane. (donc page blanche au début puis en fonction de l'item sélectionné chargement de la page).

publicclass FileAfficher extends JFrame {
private JTextPane texte;
privateboolean texteModifie = false;
private String reponse; private HTMLDocument doc;

publicstaticvoid main(String[] args){
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
new FileAfficher();
}

 
FileAfficher(){
super("File Printer");
setSize(new Dimension(800, 800));
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter(){
 
texte = new JTextPane();
texte.setContentType("text/html");
HTMLEditorKit k = new HTMLEditorKit();

//L'unité de base de la structure est un Element, qui a un ensemble d'attributs.
//Les éléments st de natures différentes suivant qu'on a affaire un texte HTML : html, body, p, content, etc...
doc = (HTMLDocument)k.createDefaultDocument();
texte.setEditorKit(k);
texte.setDocument(doc);
 

Style defaut = texte.getStyle("default");
Style as = texte.addStyle("stylePerso",defaut);

 
StyleConstants.setFontFamily(as, "Monospaced");
StyleConstants.setFontSize(as, 20);
StyleConstants.setAlignment(as, 1);
 
StyledDocument docStyled = texte.getStyledDocument();


texte.setBackground(Color.WHITE);

texte.addKeyListener(new KeyAdapter(){
publicvoid keyTyped(KeyEvent evt){
texteModifie = true;
}
});
 
getContentPane().add(new JScrollPane(texte));
setJMenuBar(barreMenus());
setVisible(true);
}
 
private JMenuBar barreMenus(){

[.....]
menu.addSeparator();
JMenuItem information = new JMenuItem("Information");
menu.add(information);
information.addActionListener(new ActionListener(){
publicvoid actionPerformed(ActionEvent e){
String reponse = JOptionPane.showInputDialog("Nom du centre hospitalier?");
 
/*
* String nomCentre= JOptionPane.showInputDialog("Nom du centre hospitalier: ");
* String idCentre= JOptionPane.showInputDialog("Identifiant du centre hospitalier: ");
* String nomPreleveur= JOptionPane.showInputDialog("Préleveur: ");
* String datePrelev=JOptionPane.showInputDialog("Date de prélèvement:");
* String heureArrivee=JOptionPane.showInputDialog("Heure d'arrivée:");
* String heureDepart=JOptionPane.showInputDialog("Heure de départ:");
* int numeroPage= JOptionPane.showInputDialog("Numero de fiche:");
*/

 
try{
FicheRecapi(reponse);
/*
* Fiche(nomCentr,nomPreleveur,datePrelev,heureArrivee,heureDepart);
*/

texteModifie =true;
}catch(IOException e1){
// TODO Auto-generated catch block
e1.printStackTrace();
}
 
}
});
 
return barre;
}
 
privatevoid FicheRecapi(String reponse)throws IOException{

String filename ="/home/fripette/workspace/FilePrinter/finFicheRecap.html";
texte.setText(filename);

 

Donc lorsque je clique sur l'item "information" que je rentre une réponse bidon (pour le moment après cette information me sera utile ) .
La page finFicheRecap.html devrait se charger mais il n'y a rien et pas de message d'erreur dans la console !!
J'ai donné le lien absolu et le script java se trouve aussi dans FilePrinter.
Des idées ?
jeudi 27 mars 2008 à 10:16:34 | Re : Perdue dans la syntaxe JTextPane et html

Fridimette

Bon je vous tiens au courant de mon avancé et des problèmes rencontrés.
Peut-être que quelqu'un se trouvera dans mon cas un jour et qu'un autre quelqu'un pourra peut etre m'aider à avancer (maintenant que mon projet est de plus en plus clair).


Je génère des bouts de texte en html que j'ajoute à un fichier html final qui sera affiché dans le JEditorPane :

FileAfficher() {
super("File Printer");
setSize(new Dimension(800, 800));
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
quitter();
}
});



texte = new JEditorPane();
texte.setContentType("text/html");
texte.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);

StyleSheet myStyleSheet = new StyleSheet();
myStyleSheet.addRule("body {font: 20px Dialog; color: blue}");
myStyleSheet.addRule("p {font: 20px Serif}");

HTMLEditorKit k = (HTMLEditorKit)(texte.getEditorKitForContentType("text/html"));
k.setStyleSheet(myStyleSheet);
texte.setEditorKit(k);

Document doc = texte.getDocument();
texte.setDocument(doc);
texte.setBackground(Color.WHITE);


getContentPane().add(new JScrollPane(texte));
setJMenuBar(barreMenus());
setVisible(true);
 
private void FicheRecapi(String nomCentre,String idCentre,String nomPreleveur,String datePrelev,String heureArrivee,
String heureDepart,String numeroPage) throws IOException{


//Partie concernant l'entête non variable de cette Fiche
/* Ouverture des flux */

FileInputStream debutfilename =new FileInputStream("/home/fripette/workspace/FilePrinter/enteteFicheRecap.html");
FileOutputStream fichierFinal = new FileOutputStream("/home/fripette/workspace/FilePrinter/FinalFicheRecap.html");

/* Lecture par segment de 0.5Mo */
byte buffer[]=new byte[512*1024];

/* Ecriture du début du fichier dans le fichier final */
WriteHTML(debutfilename,fichierFinal,buffer,0);

/* Fermeture des flux */
debutfilename.close();

/*Partie concernant la partie variable de cette Fiche*/

/* Ecriture des données variables dans un fichier qi va être relu après */
FileWriter milieufilename =new FileWriter("/home/fripette/workspace/FilePrinter/milieuFicheRecap.html");

String intro="Codification des échantillons prélevés";

milieufilename.write(intro);

String baliseDebut="<br><br><TABLE cols=\"3\" colspan=\"3\" width=\"75%\">";
milieufilename.write(baliseDebut);


String borneDebut="1.";

String borneDEBUT=borneDebut+datePrelev+"."+idCentre+"."+numeroPage;


String borneFin="";
String borneFIN=borneFin+datePrelev+"."+idCentre+"."+numeroPage;


String un= "<TR><TD width=\"40%\"align=\"left\">";
String trois="</TD><TD width=\"10%\" align=\"center\">à</TD><TD width=\"40%\" align=\"right\">";
String cinq="</TD></TR>";

for(int repetition=0; repetition<=9;repetition++){
String reslt=un+borneDEBUT+trois+borneFIN+cinq;
milieufilename.write(reslt);
}

String baliseFin="</TABLE><br><br>";

milieufilename.write(baliseFin);
milieufilename.close();


/* Ecriture de la partie variable dans le fichier final */
FileInputStream milieu =new FileInputStream("/home/fripette/workspace/FilePrinter/milieuFicheRecap.html");
byte buffer3[]=new byte[512*1024];
WriteHTML(milieu,fichierFinal,buffer3,0);


//Partie concernant la partie finale non variable de cette Fiche
FileInputStream finfilename =new FileInputStream("/home/fripette/workspace/FilePrinter/finFicheRecap.html");
byte buffer2[]=new byte[512*1024];
WriteHTML(finfilename,fichierFinal,buffer2,0);

/* Fermeture des flux */
finfilename.close();
fichierFinal.close();

//IMPORTANT :pour insérer une page .html dans le JTextPane texte.read(fichierFinal,doc);
FileInputStream ficheFinal = new FileInputStream("/home/fripette/workspace/FilePrinter/FinalFicheRecap.html");

// au final : on relit le fichier final en .html dans lequel j'ai ajouté mes bouts de .html
texte.read(ficheFinal,doc);

}


Bon ce que j'ai essayé de faire c'est :

ajouter un logo : mais j'ai mis le source dans le code html mais celui ci n'est pas pris en compte par le JTextPane (ou JEditorPane):

<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<body>
<table cols="2" width="80%" >
<TR>
<TD ALIGN="LEFT" width="30%">
<IMG src="/home/fripette/workspace/FilePrinter/logo.jpg" style="height:100%">
</TD>
<TD ALIGN="CENTER" width="60%" bgcolor="#C0C0C0">
Fiche R&eacute;capitulative des pr&eacute;l &egrave;vements</TD>
</TR>
 
<TR>
<TD></TD>


De plus j'essais de mettre en forme mon formulaire mtnt: affiner la police et la taille de celle ci. (par en bleu au début avec le StyleSheet).

Autre chose que j'aimerai faire c'est rajouté/complété ma partie variable :
en mettant une partie de type combobox dans la variable borneDEBUT et borneFIN.
UN exemple :

si ma borneDEBUT est 1.        .250308.GRA.01.
Dans l'espace blanc j'aimerai avoir un combobox avec différents choix : exemple de codes internes : EBM;LRS1,LRS2 ....

J'espère avoir été plus claire!
Help !


Cette discussion est classée dans : texte, string, html, doc, jtextpane


Répondre à ce message

Sujets en rapport avec ce message

Un Zolie text html dans mes JTextPane [ par DirigeableMoue ] Coucou de thailande ou il fait chaud mais ou il n y a pas de bouquins sur java.J ai donc une fenetre avec un text pane et j affiche un texte au cour d Caret et Jtextpane [ par lechiconeur ] Bonjour, j'ai encore un souci. J'ai un JTextEditor qui contient du texte formaté grace à des balises HTML. J'aimerai récupérer la position du curseur imprimer texte [ par didoux95 ] Bonjour à tous.j'essay d'ajouter une fonction d'impression à mon application. Pour cela, j'utilise le package "java.awt.print" (PrinterJob).j'ai reali JTextPane [ par didoux95 ] Bonjour a tous.J'utilise dans mon application un JTextPane pour saisir du texte. J'ai choisi un JTextPane afin de pouvoir coloré le texte de différent Sauter une ligne dans un JButton [ par mammnon ] Bonjour à tous. Tout est le titre? non pas vraiment. J'arrive à faire sauter une ligne dans mon JButton en utilisant du code html. CEPENDANT, pour un afficher un page html dans une zone texte [ par mahdifsegs ] bonjour a tous, je veut afficher une page web en arabe avec le codage Utf-8 dans un jEditorPane. j'ai arriver a faire l'affichage du page en utilisan Graphics HTML [ par didoux95 ] Bonjour à tous .. Est ce qu'il est possible d'écrir un code HTML avec un Graphics. Par exemple la chaine "mon texte" écrirait le texte "mon texte" sou Style de formatage dans un JTextPane / Problème [ par heavenboy ] Bonjour,je vous explique la situation.J'ai créer une fenêtre qui contient entre autre un JScrollPane, lui même contenant uniquement un JTextPane. Une Prob avec un Editeur html [ par tiepeurfou ] bonjour a tous,je suis en train de créer un editeur HTML WISIWIG en ligne et j'ai quelques problemes, j'utilise un JTextPane avec un HTMLEditorKit pou Recherche de texte dans un JTextPane [ par lechiconeur ] Bonjour. Voila mon problème. J'ai un JtextPane (ToolBarExemple.pane) aux format html dans lequel j'aimerai rechercher une chaîne de caractère. [code=j


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales