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

    [Java] Scrolling verso l'alto

    Salve,
    ho una JTextArea dentro un JScrollPane, faccio degli append() sulla JTextArea, vorrei che quando il testo supera le dimensioni della JTextArea e compare la barra di scrolling verticale, il cursore di quest'ultima rimanesse in basso, seguendo l'ultimo append (in pratica deve scrollare verso l'alto il testo).

    Ho girato e rigirato la doc ma non trovo nulla.. idee?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non è che si capisca... cioè, il comportamento normale è che la JTextArea ti mostri l'ultima riga e quindi la scrollbar dello JScrollPane vada tutta in basso. Se vuoi invece vedere sempre la prima riga inserita, ti basta, senza troppi sbattimenti, aggiungere un

    ta.setCaretPostion(0); dopo ta.append(...) dove ta è la tua JTextArea
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Originariamente inviato da Andrea1979
    cioè, il comportamento normale è che la JTextArea ti mostri l'ultima riga e quindi la scrollbar dello JScrollPane vada tutta in basso.
    ecco, io voglio che succeda questo, ma non succede questo di default...

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    posta il tuo codice. Se non hai ritoccato le scrollbars policies allora non c'è ragione perché non avvenga.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    codice:
    public static JTextArea console = new JTextArea();
    codice:
    console.setBackground(Color.BLACK);
    		console.setForeground(Color.WHITE);
    		console.setEditable(false);
    		console.setFont(new Font("Courier", Font.PLAIN, 10));
    		JScrollPane consolepanel = new JScrollPane(console, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    		consolepanel.setBorder(new TitledBorder(new LineBorder(Color.BLACK), "Console", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.TOP, new Font("Verdana", Font.PLAIN, 12)));
    		consolepanel.setOpaque(false);

  6. #6

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    a me funziona alla perfezione:

    codice:
    public class JScrollText extends JFrame {
        
        private JTextArea console;
        private JButton b;
        
        /** Creates a new instance of JScrollText */
        public JScrollText() {
            super("This is a test");
            this.setSize(400,300);
            this.getContentPane().setLayout(new BorderLayout());
            
            b = new JButton("Add Text");
            console = new JTextArea();
            console.setBackground(Color.BLACK);
    	console.setForeground(Color.WHITE);
    	console.setEditable(false);
    	console.setFont(new Font("Courier", Font.PLAIN, 10));
    	JScrollPane consolepanel = new JScrollPane(console, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    	consolepanel.setBorder(new TitledBorder(new LineBorder(Color.BLACK), "Console", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.TOP, new Font("Verdana", Font.PLAIN, 12)));
    	consolepanel.setOpaque(false);
            this.getContentPane().add(consolepanel, BorderLayout.CENTER);
            b.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent ae) {
                    console.append("Ho aggiunto una riga\n");
                    //console.setCaretPosition(0);
                }
            });
            this.getContentPane().add(b, BorderLayout.NORTH);
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public static void main (String[] args) {
            new JScrollText();
        }    
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Mi pare di ricordare che il JScrollPane abbia di questi comportamenti, probabilmente la cosa cambia da macchina a macchina.
    Per ovviare all'inconveniente è sufficiente inserire questa istruzione, subito dopo l'inserimento:
    codice:
    console.setCaretPosition( console.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

  9. #9
    Originariamente inviato da LeleFT
    codice:
    console.setCaretPosition( console.getDocument.getLength() );
    funziona, grazie!

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.