Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [Java] StyleDocument e salvataggio su file

    salve!
    tramite jfilechooser mi salvo il contenuto di un jtextpane.
    nel jtextpane ho impostato un minimo di stile:
    codice:
     document = new DefaultStyledDocument();
            countAttrs = new SimpleAttributeSet();
            attrs = new SimpleAttributeSet();
            countAttrs.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
            attrs.addAttribute(StyleConstants.CharacterConstants.Foreground, Color.BLUE);
            attrs.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
    poi aggiungo il testo e imposto il document.
    si vede bene solo che quando lo vado a salvare in txt o in doc il testo risulta nero.
    nn c'è modo di salvare anche il colore?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    come salvi? Questo non vuole assolutamente essere un esempio di buona programmazione... ma il file viene salvato, e mantiene blu e grassetto.
    codice:
    import java.awt.*;
    import java.io.*;
    import javax.swing.*;
    import java.awt.event.*;
    import javax.swing.text.*;
    import javax.swing.text.html.*;
    /**
     *
     * @author Andrea
     */
    public class JTextPaneTest extends JFrame {
        
        private String text = "Nel mezzo del cammin di nostra vita\n" +
                "mi ritrovai per una selva oscura\n"+
                "che la diritta via era smarrita";
        
        private JTextPane textPane = new JTextPane();
        private JButton save = new JButton("SAVE");
        private String filePath = "C:/Users/Andrea/Desktop/savefile.doc";
        private Document document;
        
        private class SaveAction implements ActionListener {
            
            public void actionPerformed (ActionEvent ae) {
                StyledDocument doc = (StyledDocument)textPane.getDocument();                 
                HTMLEditorKit kit = new HTMLEditorKit();                
                BufferedOutputStream out;
                try {
                     out = new BufferedOutputStream(new FileOutputStream(filePath));
                     kit.write(out, doc, doc.getStartPosition().getOffset(), doc.getLength());
                     out.flush();
                     out.close();
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        
        private Document initDoc() {
            document = new DefaultStyledDocument();        
            SimpleAttributeSet attrs = new SimpleAttributeSet();
            
            attrs.addAttribute(StyleConstants.CharacterConstants.Foreground, Color.BLUE);
            attrs.addAttribute(StyleConstants.CharacterConstants.Bold, Boolean.TRUE);
            try {
                document.insertString(0, text, attrs);
            }
            catch (Exception e) {
                return null;
                //e.printStackTrace();
            }
            return document;        
        }
            
        public JTextPaneTest() {
            super("Test di salvataggio");
            this.setSize(400,400);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            textPane.setDocument(this.initDoc());
            
            this.getContentPane().add(new JScrollPane(textPane), BorderLayout.CENTER);        
            this.getContentPane().add(save, BorderLayout.SOUTH);
            
            save.addActionListener(new SaveAction());
            this.setVisible(true);
        }
        
        public static void main (String[] args) {
            new JTextPaneTest();
        }
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    richiamo un flichooser al quale passo il testo del textpane.
    e poi dopo aver fatto i controlli del caso per ora ho fatto semplicmente questo:
    codice:
    FileWriter file = new FileWriter(f, false);
    PrintWriter out = new PrintWriter(file);
    out.println(txt);
    out.close();
    però vedo che te usi HTMLEditorKit, BufferedOutputStream e FileOutputStream.
    probabilmente dipende da quello.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    credo che se brutalmente ti ricavi solo il testo con getText() quello che ne esce fuori è solo il testo senza alcuna informazione riguardante gli stili.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    si in effetti io al JFileChooser gli passo il testo preso con getText():
    codice:
        private void saveTxtActionPerformed(java.awt.event.ActionEvent evt) {                                        
            try {
                Save.salva(txtResult.getText());
            } catch (IOException | DocumentException ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage());
            }
        }
    è un problema risolvibile in qualche modo secondo te?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    leggi sopra.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    ho fatto così.
    al metodo salva invece di passare una String passo direttamente StyledDocument.
    e poi:
    codice:
    HTMLEditorKit kit = new HTMLEditorKit();
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f));
    kit.write(out, doc, doc.getStartPosition().getOffset(), doc.getLength());
    out.flush();
    out.close();
    questo per il doc.
    per il file txt rimango come prima xchè sennò dentro al file vedo tutti i tag html (in un txt i colori sono inutili).
    ora sto mettendo a posto il pdf.
    grazie per la dritta!

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Prego

    EDIT:
    potresti usare anche RTFEditorKit e produrre un file rtf valido. Solo che non ho mai approfondito la qualità del supporto rtf in java e quindi ho sparato subito l'HTMLEditorKit, che però ha il "difetto" dei tag html (rtf avrebbe comunque i suoi tag)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.