Visualizzazione dei risultati da 1 a 6 su 6

Discussione: JTextArea e Document

  1. #1

    JTextArea e Document

    Ciao ragazzi

    Riformulo una domanda su JTextArea ma con i document tipo JTextField:

    1) E' possibile creare un Document che presa una stringa

    ad Esempio " Nominativo " composto da Nome e Cognome

    divida la stringa distribuendo il nome sulla prima riga della jTextArea e il cognome sulla seconda???

    2) Nello stesso document è possibile anche impostare quanto deve essere lunga la prima e la seconda riga

    Sottolineo che questa JTextArea conterrà una stringa presa da un db ...quindi tutta in una volta ... non è editabile ... praticamente mi deve visualizzare una stringa in un determinato modo


    Se si ... qualcuno mi può mostrare un esempio di codice anche solo una piccola prova !!!

    Grazie come sempre a tutti !!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    E' possibile creare un Document [...]:
    certo. Come l'hai descritto tu e senza troppi problemi. Domanda mia? Vale la pena creare un Document, per poi andarlo a infilare dentro una JTextArea che ha le capacità stilistiche di un girino?

    Se devi usare una JTextArea, non ti conviene semplicemente tirare fuori i dati dal database, splittare su due righe quanto deve essere splittato e quindi scegliere lo stile con cui mostrarlo nella JTextArea e passarglielo (o nel costruttore stesso, o con setText - se la JTextArea già esiste). Unica accortezza: rendi la JTextArea non editabile se questo è l'ulteriore effetto che vuoi ottenere.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    L'idea del Document e della jTextArea è nata per il seguente motivo:

    Io dovrei simulare un Display (hai presente quello dei contatori Enel ? )

    in cui visualizzare questa stringa ... chiaramente il display ha solo due righe di 10 caratteri

    se la stringa supera tale misura ... allora la divide su due righe

    Esempio : " Pinco Pallino" --- se uguale a 10 tutta su una riga, se supera 10 la spezza in "Pinco" su una riga e "Pallino" su un'altra

    La mia scelta è dettata solo dal fatto che la jTextArea ha lineWrap ecc

    Se tu hai una soluzione più efficacie ...accetto volentieri il tuo consiglio ... ho già fatto questa domanda ma ho ricevuto solo risposte in merito al perchè uso la jTextArea ... ma l' importante per me è simulare il Display ... accetto qualsiasi soluzione valida


    Grazie Andrea e a chiunque mi possa gentilmente aiutare !!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Allora, ho modificato un esempio che avevo fatto qualche tempo fa per provare Document, e mi sono risparmiato un mal di testa con i lineWrap e quant'altro - forse la cosa migliore.

    codice:
    import javax.swing.*;
    import javax.swing.text.*;
    /**
     *
     * @author Andrea
     */
    public class LineWrapTest extends JFrame {
    
        private JTextArea ta;
        private static final int MAX_LENGTH = 20;
    
        private class MyDocument extends PlainDocument {
    
            private int max_length;
    
            public MyDocument(int max_length) {
                this.max_length = max_length;
            }
    
            public void insertString(int offset, String string, AttributeSet attr) throws BadLocationException  {
    // voglio al massimo il doppio dei caratteri a disposizione per ogni riga
    // essendoci in totale 2 righe.
                string = string.substring(0, max_length*2-1);
    
    // controllo che carattere occupa la posizione "max_length" e determino
    // qual è la posizione del primo spazio prima di tale posizione
                char c = string.charAt(max_length-1);
                int index = 0;
                if (c != ' ') {
                    index = string.substring(0, max_length).lastIndexOf(" ");
                }
                else {
                   index = max_length-1;
                }
    // creo la stringa da mostrare
                string = string.substring(0, index)+"\n"+string.substring(index+1);
                super.insertString(offset, string, attr);
            }
    
        }
    
        public LineWrapTest(int max_length, String text) {
            super("Test Document");        
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
            ta = new JTextArea(new MyDocument(max_length));
            ta.setText(text);
            ta.setFont(new java.awt.Font("Courier New", java.awt.Font.PLAIN, 14));        
            ta.setEditable(false);        
            this.getContentPane().add(ta);       
            this.setVisible(true);
            this.pack();                        
        }
      
      public static void main (String[] args) {
            new LineWrapTest(20, "Testo di Prova, sopra 40 butta via tutto");
        }
    
    }
    Dovresti vedere solo 2 righe, e nella seconda riga la "o" finale di "tutto" non dovrebbe esserci.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Grazie Andrea ... vedo un po' di prenderne spunto ... provo e ti faccio sapere


    Grazie sei stato gentilissimo

  6. #6
    Andrea il tuo codice funziona benissimo (con qualche piccola modifica per adattarlo al mio caso)

    Unico problemino :

    Quando uso l' upperCase della stringa ... la jTextArea si deforma e mi escono le scrollbar nonostante io abbia messo nel codice Autoscroll (false) ... come se la jTextArea risultasse troppo piccola per mostrare tutti i caratteri

    Come potrei risolvere ... magari impostare una dimensione fissa che sia sufficiente a mostrare 20 caratteri anche in upperCase senza che escano le scroolbar???

    Mi faresti un esempio ???

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.