Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Perdue dans la syntaxe JTextPane et html [ Divers / Applets ] (Fridimette)

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é 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 Besoin d'ajouter des formes géométriques dans un JtextPane [ par djanele38 ] Bonjour A tous,C le tt premier msg que je poste sur ce site et j'espère que vous allez pouvoir m'aider. Ma question est la suivante :Je dois développ String -> int [ par maxinfos ] Bonjour,voilà, depuis que j'utilise Java (depuis 6 semaines) pour mon stage, j'ai toujours effectué la conversion d'un String vers un entier (int) par inserer du texte dans un JTextPane [ par fred240683 ] Bonjour je voudrais inserer du texte dans un JTextPane.qqn peut il m'aider svpmerci afficher un doc HTML [ par flexx ] Salut je voudrais savoir comment afficher une page html à partir d'une application java. (en fait, je voudrais lancer une aide écrite en HTML à partir placer du texte autour d'une image dans un jtextpane [ par juliousss ] Bonjour, je dois créer un editeur de texte en java, pour cela j'utilise un jtextpane.Je voudrais savoir comment mettre du texte autour d'une image, ca Editeur de texte HTML de Nicolaserny du 15/04/2002 [ par tonyimbault ] Bonjour,j'ai utilisé le code de l'editeur de texte déposé par Nicolaserny (le 15 04 2002) pour mettre en place l'impression d'une zone de texte en HTM Balise Html souris et applet [ par ceteTervu ] BonjourJ'ai un problèmede comptabilité entre une applet java et son environnement HTML.Je souhaiterais que sur passage de la souris sur cette applet, Probleme de Collection [ par onini ] Alors voila j'ai fait une class TextHtml mais losque ke je compile avec javac il me sort une erreur qui est : TextHtml.java:11: expected     Linked Probleme : changer la typo dans un JtextPane [ par croutteman ] J'ai un JtextPane ou je peux ecrire un text dedans, et j'ai mis des option pour changer la typo au dessus. Je veux pouvoir changer le corps, la police


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.