Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    110

    [JAVA] Aiuto con JTextPane...

    Cari amici e colleghi,

    ho disperatamente bisogno di vostri lumi. Sto sviluppando un'applicazione che elabora del testo, una sorta di Word. La parte destinata al testo scritto, diciamo il foglio per intenderci, è determinato da un oggetto di tipo JTextPane, che mi permette di scriverci dentro testo di varie font, grandezze e stili, ecc.

    Il problema è: come posso settare le dimensioni del "foglio", quindi del JTextPane???

    Ho provato con setSize(width, height), metodo ereditato da Component, ma nulla!!! Se non vado a capo con l'invio, il testo sta sempre su una stessa riga.


    AIUTOOOOO!!!!!!!!!!

    Grazie a tutti coloro che riusciranno ad illuminarmi!

  2. #2
    Io inquesto momen to non ti so aiutare direttamente però se avessi il tuo stesso problema andrei a controllare i sorgenti dell'applicazione demo distribuita con la jdk ...\j2sdk1.4.1_05\demo\jfc\Notepad
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #3
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ho guardato già io sul Notepad.jar, va anche lui a capo solo con l'invio.

    Ora non ricordo se JTextPane ha il metodo setLineWrap(boolean), se non è presente potresti guardare i sorgenti della classe JTextArea, che sicuramente l'ho incapsula, e vedere come è implementato.

    In alternativa potresti utilizzare il metodo setCaretPosition, se uno imposta margine 15, e per semplicità 15 è uguale a 15 caratteri, dopo il 15-esimo caratte lo riporti alla riga succesiva e indietro di 15.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Io l'ho utilizzata nella mia chat, per visualizzare i messaggi, in questo modo: l'ho inserita in un JScrollPane. Dopodiché ho settato la dimensione del JScrollPane e, conseguentemente, anche la dimensione della JTextPane interna:
    codice:
    JTextPane jtp = new JTextPane();
    jtp.setEditable(true);   // nella mia chat è impostata a false...
    JScrollPanel jsp = new JScrollPane(jtp);
    
    jsp.setSize(width, height);
    jtp.setSize(width, height);
    In questo modo, quando il testo raggiunge il bordo destro, viene automaticamente portato a capo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    110

    Problema risolto a metà

    Innanzitutto grazie per l'interessamento e per i pareri esposti.

    Tra i vostri suggerimenti ed un'occhiata al tutorial di Java, sono riuscito a risolvere parzialmente il problema. Ho definito il mio JTextPane all'interno di un JScrollPane di cui ho settato le dimensioni e poi ho posizionato quest'ultimo su un JPanel:

    ----------------------------------------------------
    textPane = new JTextPane();

    JScrollPane paneScrollPane = new JScrollPane(textPane);

    paneScrollPane.setPreferredSize(new Dimension(200, 200));
    paneScrollPane.setMinimumSize(new Dimension(10, 10));

    JPanel rightPane = new JPanel(new GridLayout(1,0));
    rightPane.add(paneScrollPane);
    rightPane.setBorder(BorderFactory.createCompoundBo rder(BorderFactory.createTitledBorder(titolo),Bord erFactory.createEmptyBorder(5,5,5,5)));

    add(rightPane);
    ----------------------------------------------------


    Risultato: la pagina risulta limitata ORIZZONTALMENTE, cioè quando il testo arriva alla fine della pagina va a capo in automatico.

    Quello che NON ho ottenuto è che si blocchi qaundo arriva in fondo alla pagina. Bensì coninua a scrivere allungando la pagina all'infinito.


    Come posso fare?

    HELP, PLEASE!!! Sto impazzendo!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    A questo punto non lo so... non vedo quali vantaggi tu possa avere dal non allungamento in verticale... prova a rimuovere il componente dal JScrollPane... per ora non vedo altre soluzioni.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    110
    Beh, per ciò che riguarda i vantaggi: il cliente per cui sto sviluppando il prodotto vuole un editor di testo capace di dividere il testo scritto in pagine. Quindi se non posso limitare lo spazio di scrittura (il JTextPane) in verticale, come posso delimitare la singola pagina?

    Capito ora qual è il mio scopo quindi il mio problema?

    Grazie ancora a tutti, spero che insieme riusciamo a realizzare ciò che cerco!

  8. #8
    codice:
    private int printText(TextToPrint text, Book book, Vector currentPage, int currY, int xLimit, int yLimit) {
            // set the font used to print this text
            graphics.setFont(text.font);
    
            // Get the FontMetrics for the current Font
            fm = graphics.getFontMetrics();
            int rowHeight = fm.getHeight();
    
            // If a new page is beginning shift the cursor in the bottom position of the first row 
            if (currY == 0) currY = rowHeight;
    
            // Tokenize the test to be printed in row
            StringTokenizer st = new StringTokenizer(text.text, "\n", true);
            
            // Remember is the last row printed is empty or not
            boolean emptyRow = true;
    
            while (st.hasMoreTokens()) {
                String currentRow = st.nextToken();
    
                // If the row is empty move down the point of a distance equal to the row height
                if (currentRow.equals("\n")) {
                    if (emptyRow) {
                        currY += rowHeight;
                        
                        // If the page is finished save it in the book and begin a new one
                        if (currY >= yLimit) {
                            book.append(new Page((Vector)currentPage.clone()), pf);
                            currentPage.removeAllElements();
                            currY = rowHeight;
                        }
                    } else emptyRow = true;
                } else {
                    // the row isn't empty
                    emptyRow = false;
                    
                    // split the current block of text in more row to fit it in the page
                    Enumeration rows = splitString(currentRow, xLimit).elements();
    
                    // Print the text a row at time
                    while (rows.hasMoreElements()) {
                        currentPage.add(new StringToPrint((String)rows.nextElement(), text.font, (int)pf.getImageableX(), (int)pf.getImageableY() + currY));
                        currY += rowHeight;
                        
                        // If the page is finished save it in the book and begin a new one
                        if (currY >= yLimit) {
                            book.append(new Page((Vector)currentPage.clone()), pf);
                            currentPage.removeAllElements();
                            currY = rowHeight;
                        }
                    }
                }
            }
            return currY;
        }
    Guarda questo codice,forse non fa perfettamente al caso tuo ma può darti qualche idea su come la cosa possa essere fatta.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.