2017-01-28 3 views
-1

I-Code für einen Server ich schreibe, wo, wenn jeder Client eine Verbindung herstellt, ihren Benutzernamen dynamisch durch Hinzufügen eines JLabel auf die Server-GUI angezeigt, zB:Swing - Scrollbare Grid

public class Server { 

    public void connect() { 
     //Handle client 
     frame.add(new JLabel(client.getUsername())); 
    } 

} 

Nun möchte Ich mag an Fügen Sie diese zu einem Gitter/einer Tabelle mit drei Spalten hinzu, wobei jede JLabel eine andere Zelle belegt. Wenn die Tabelle gefüllt ist, sollte die Tabelle scrollbar sein, da automatisch mehr Zeilen hinzugefügt werden.

Ich bin mir nicht sicher, wie das geht. Das Hinzufügen einer GridLayout und einer JScrollPane zu derselben JFrame setzt die JScrollPane zu einer Zelle, anstatt die ganze Tabelle.

Was ist ein guter Weg, dies zu tun?

+1

[Verwenden von Tabellen] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html), [Verwenden von Listen] (http://docs.oracle.com /javase/tutorial/uiswing/components/list.html), [Wie Scroll Panes zu verwenden] (http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html) – MadProgrammer

Antwort

1

Das Raster muss innerhalb des Bildlauffelds sein. Dies kann durch den Konstruktor

JScrollPane(Component view) 

oder

erreicht werden
JScrollPane(Component view, int vsbPolicy, int hsbPolicy) 

Sie können auch die Bildlauffenster einstellen, so dass die Bildlaufleisten versteckt ar, wenn sie nicht benötigt werden:

JScrollPane scroll = new JScrollPane(myGrid, 
     JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
     JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

Anschließend müssen Sie den Bildlaufbereich zum Iframe, aber nicht zum Raster hinzufügen.

+0

Was genau wäre ' Komponentenansicht' sein? Ich vermute ein 'JFrame' mit einem' GridLayout'? – Glenn

+0

Swing-Komponenten sind ** in einem JFrame **, zum Beispiel JPanel, JLabel, JScrollPane usw. – Aloso