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

    JTextArea in un JScrollPane non si vede

    Salve, ho notato che effettuando degli output in una JTextArea, qualora lo spazio non fosse sufficiente, il testo non va a capo, e inoltre se la JTextArea si è riempita, non scrolla.
    Ho quindi aggiunto al codice un JScrollPane e usato questo per l'inserimento nel layout: risultato è che vedo l'elemento con la barra di scorrimento ma non più la JTextArea.
    codice:
    import javax.swing.*;
    import java.awt.*;
    
    
    public class Finestra extends JFrame {
    	private JTextArea textArea;
    	private Choice scegli;
    	private JButton bottone;
    	private Panel squadre;
    	private Font font;
    	private JLabel copy;
    	private JScrollPane scroll;
    	
    	public Finestra() {
    		super("Playoff A1");
    		setSize(600, 400);
    		setResizable(false);
    		setLocationRelativeTo(null);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setLayout(new BorderLayout());
    		scroll = new JScrollPane (textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    		add(scroll);
    		setVisible(true);
    		textArea = new JTextArea();
    		font = new Font("Arial", Font.PLAIN, 16);
    		textArea.setFont(font);
    		textArea.setWrapStyleWord(true);
    		// codice non pertinente il problema...
    		add(squadre, BorderLayout.NORTH);
    		add(scroll, BorderLayout.CENTER);
    		add(copy, BorderLayout.SOUTH);
    
    		setVisible(true);
    Nel main() c'è un
    codice:
    new Finestra();
    Dato che non riesco a vedere la JTextArea dentro il JScrollPane, non riesco a sapere se scorre da sola all'aggiungersi di righe di output o se resta in cima e bisogna procedere col mouse.

  2. #2
    Problema visibilità risolto spostando l'implementazione di scroll dopo quella di textArea...
    Però come temevo per vedere le righe aggiunte bisogna scorrere manualmente né il testo va a capo se non ha spazio orizzontale a sufficienza, almeno per come è impostato il codice attuale.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    codice:
    		scroll = new JScrollPane (textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    
    		textArea = new JTextArea();
    Il problema è che hai creato il JTextArea DOPO il JScrollPane. Questo significa che quando hai istanziato JScrollPane la variabile textArea valeva ancora null e questo è stato passato al JScrollPane. Assegnare dopo qualcosa a textArea non cambia ciò che si era "preso" il JScrollPane!

    Inoltre tieni presente che in JTextArea il "wrapping" del testo è controllato da 2 proprietà:

    - lineWrap (getLineWrap() / setLineWrap(boolean) )
    - wrapStyleWord (getWrapStyleWord() / setWrapStyleWord(boolean) )

    Ed è la prima, lineWrap, che indica se il wrapping avviene oppure no. Per default è false, cioè il testo va oltre orizzontalmente e quindi devi scrollare anche in orizzontale. Se vuoi che NON compaia mai la scrollbar orizzontale (ovvero attivi il wrapping) va settato a true.
    Ultima modifica di andbin; 16-05-2022 a 12:26
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Certo, l'errato ordine di creazione dei due oggetti l'avevo rilevato già nel primo commento... Ora con lineWrap(true) il comportamento del testo è come lo desidero (non amo le scrollbar orizzontali nemmeno nei siti web, quindi per me va benissimo HORIZONTAL_SCROLLBAR_NEVER).
    Mi rimane il problema del fatto che textArea non "scende" graficamente, cioè vedo la scrollbar verticale ridursi perché aumentano le righe ma per leggerle devo scendere io col mouse, invece vorrei che ci fosse il "focus" sull'ultimo append() fatto. Non so se sono riuscito a spiegarmi. Tipo scrivere i commenti qui, insomma, o su qualunque textarea in HTML.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Per ottenere quello che desideri devi riposizionare programmaticamente la posizione del cursore all'interno della JTextArea.
    Puoi farlo "manualmente" dopo ogni aggiunta oppure registrare un Listener sul Document della JTextArea che lo faccia automaticamente ad ogni inserimento (vedi l'interfaccia DocumentListener ed il suo metodo insertUpdate() ).

    codice:
    JTextArea textArea = ...;
    
    
    // Dopo l'inserimemento devi riposizionare il caret:
    textArea.setCaretPosition( textArea.getDocument().getLength() );

    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

  6. #6
    Grazie, non conoscevo questo metodo, peraltro ereditato da JTextArea.

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.