# jScrollPane ganz nach unten scrollen



## SBehnen27 (24. Mrz 2005)

ich habe für einen mini chat einen textpane in einem JScrollPane.

wenn ich selber eine nachricht schreibe, wird das fenster ganz nach unten gescrollt (autoscroll ist an).
wenn aber eine neue zeile kommt, weil mein partner mir etwas sendet, wird nicht nach unten gescrollt.
dafür wollte ich in die methode für das empfangen von nachrichten einbauen, dass das JScrollPane ganz nach unten scrollt.

Den code, wie das ´bei einer Scrollbar funzt, hab ich schon gefunden, aber das klappt wohl ned bei jscrollpanes ;(


----------



## stev.glasow (24. Mrz 2005)

JScrolPane hat eine Methode getVerticalScrollBar()  über das JScrollBar Objekt kannst du dann nach unten scrollen.


----------



## SBehnen27 (28. Mrz 2005)

das würde dann auf soetwas hinauslaufen:

jScrollPane1.getVerticalScrollBar().setValue(jScrollPane1.getVerticalScrollBar().getMaximum());

seh ich das richtig? 
er scheint auch mitzuscrollen... aber leider nicht nach ganz unten... eine zeile ist immer im nirvana und muss per hand rangescrollt werden 

oder hab ich da nen fehler drin?


----------



## stev.glasow (29. Mrz 2005)

hm, war auch nur geraten   
Aber ich hab's mal getestet  und es ging:

```
public static void main(String[] args) throws Exception{
		JFrame f = new JFrame();
		final JTextPane t = new JTextPane();
		t.setSize(100, 100);
		JScrollPane p = new JScrollPane(t);
		final JScrollBar cb = p.getVerticalScrollBar();
		
		p.setSize(100, 100);
		f.add(p);
		f.setSize(100, 100);
		f.setVisible(true);
		
		Thread tr = new Thread(){
			public void run(){
				int x = 0;
				while(true){
					t.setText(t.getText() + "\n" + "uschie" + (x++));
					cb.setValue(cb.getMaximum());
					try{
						Thread.sleep(2000);
					}
					catch(Exception e){
						return;
					}
				}
			}
		};
		tr.setDaemon(true);
		tr.start();
		System.in.read();
		
		
	}
```
Wenn der Code nicht hilft, zeig mal deinen.


----------



## SBehnen27 (29. Mrz 2005)

ich hab deinen code ausprobiert.
leider hat der auch ned so gescrolled, wie ich mir das vorgestellt habe.

hier mal mein jungfräulicher Code. 
Problem ist, dass nicht gescrollt wird, wenn mein Partner mir etwas sendet und dadurch eine neue zeile dazukommt.


```
/*
 * Chat.java
 *
 * Created on 22. März 2005, 18:09
 */

package CardHeroes;
import java.io.*;
import java.net.*;
import java.awt.*; 
import java.awt.event.*; 
import java.awt.event.KeyEvent;
import javax.swing.JScrollPane.*;
/**
 *
 * @author  KoRnFreak
 */
public class Chat extends javax.swing.JDialog implements Runnable, KeyListener {
    
    private String IP ="0";
    private Spieler Selber;
    private ObjectInputStream ObjectIn=null;
    private ObjectOutputStream ObjectOut=null;
    private DataInputStream DataIn=null;
    private DataOutputStream DataOut=null;
    /** Creates new form Chat */
    public Chat(java.awt.Frame parent, boolean modal, String IP, Spieler Selber) {
        super(parent, modal);
        this.IP = IP;
        this.Selber = Selber;
        initComponents();
        senden.setText("OK");
        setTitle("CardHeroes Chat");
        this.addKeyListener(this); 
        ausgang.setLineWrap(true); 
        eingang.setLineWrap(true); 
    }
    public void keyPressed(KeyEvent e) {  
    } 

    public void keyReleased(KeyEvent e) { 
    } 

    public void keyTyped(KeyEvent e) { 
        if ((e.isAltDown()) && (e.getKeyChar() == 's')){ 
            senden(ausgang.getText());
        }
    } 

    public void run(){
        initNet();
        while(true){
             try{
              empfangen();
              Thread.sleep(1000);
             }
             catch(Exception e){
                 
             }
        }  
    }
    public void senden(String nachricht){
        try{
            ObjectOut.writeObject(Selber.getName()+": "+nachricht);
            ObjectOut.flush();
            ObjectOut.reset();
            eingang.setText(eingang.getText()+"\n"+Selber.getName()+": "+nachricht);
            ausgang.setText("");
            jScrollPane1.getVerticalScrollBar().setValue(jScrollPane1.getVerticalScrollBar().getMaximum());
        }
        catch(Exception e){}
    }
    public void empfangen(){
        try{
            String nachricht = ((String)ObjectIn.readObject());
            eingang.setText(eingang.getText()+"\n"+nachricht);
            jScrollPane1.getVerticalScrollBar().setValue(jScrollPane1.getVerticalScrollBar().getMaximum()+10);
        }
        catch (Exception e){}
    }
    public void initNet(){
        int geschafft = 0;
        try
           {
             Socket ConnectionSocket=new Socket(IP,9998);
             this.ObjectOut=new ObjectOutputStream(ConnectionSocket.getOutputStream());
             this.ObjectIn=new ObjectInputStream(ConnectionSocket.getInputStream());
             geschafft = 1;
             //StreamIn.ObjectObject();
           }
       catch(Exception e){
           geschafft = 0; 
       }
        if(geschafft == 0){
           try{
                ServerSocket ConnectionSocket=new ServerSocket(9998);
                Socket ClientConnection=ConnectionSocket.accept();
                this.ObjectIn=new ObjectInputStream(ClientConnection.getInputStream());
                this.ObjectOut=new ObjectOutputStream(ClientConnection.getOutputStream());		
            }
            catch(Exception e){
            }
        }
    }

    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        eingang = new javax.swing.JTextArea();
        jScrollPane2 = new javax.swing.JScrollPane();
        ausgang = new javax.swing.JTextArea();
        senden = new javax.swing.JButton();

        getContentPane().setLayout(null);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        eingang.setEditable(false);
        jScrollPane1.setViewportView(eingang);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(0, 0, 450, 260);

        ausgang.setEditable(false);
        jScrollPane2.setViewportView(ausgang);

        getContentPane().add(jScrollPane2);
        jScrollPane2.setBounds(2, 262, 380, 80);

        senden.setText("jButton1");
        senden.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                sendenActionPerformed(evt);
            }
        });

        getContentPane().add(senden);
        senden.setBounds(390, 270, 60, 70);

        pack();
    }

    private void sendenActionPerformed(java.awt.event.ActionEvent evt) {                                       
        senden(ausgang.getText());
        ausgang.requestFocus(); 
    }                                      
    
    /**
     * @param args the command line arguments
     */
    
    // Variables declaration - do not modify
    private javax.swing.JTextArea ausgang;
    private javax.swing.JTextArea eingang;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JButton senden;
    // End of variables declaration
    
}
```


----------

