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 !