SWT ScrolledComposite -> Nix mit Scrollen?

hdi

Top Contributor
Hey, steh als SWT-Anfänger vor einem Problem mit einer ScrolledComposite. Ich hab folgenden Code:

Java:
ScrolledComposite sc = new ScrolledComposite(dialog, SWT.BORDER
		| SWT.V_SCROLL);
	GridData gd = new GridData();
	gd.horizontalSpan = 2;
	gd.horizontalAlignment = GridData.FILL;
	sc.setLayoutData(gd);

	Composite scrollContent = new Composite(sc, SWT.NONE);
	FillLayout fillLayout = new FillLayout();
	fillLayout.type = SWT.VERTICAL;
	scrollContent.setLayout(fillLayout);
	for (int i = 0; i < 10; i++) {
	    Label l = new Label(scrollContent, SWT.LEFT);
	    l.setText("Msg # " + i);
	}

	sc.setContent(scrollContent);
	sc.setExpandHorizontal(true);
	sc.setExpandVertical(true);

Mein Problem ist nun dass der Inhalt, also scrollcontent, sich halt immer so groß macht wie er sein muss um alles anzuzeigen. D.h. die Scrollbalken werden nie angezeigt. Es gibt eine Methode setMinSize() für die ScrolledComposite, ich bräuchte eher setMaxSize().

Ich will halt dass das Teil nur x*y Pixel groß ist, und wenn halt nun der Inhalt, also die "scrollContent"-Composite, größer wird, naja genau dann sollen mir die Scrollbalken angezeigt werden.
Also ich kriegs einfach nicht hin dass ich Scrollbalken sehe.

Die Bsp bei google kann ich auch nicht nachvollziehen, die gehen irgendwie davon aus dass man das Fenster halt resized und kleiner zieht o.ä. aber in meinem Fall kann man nicht resizen.

Bitte um Hilfe ich versteh das Konzept von SWT noch nich so, vermisse setPreferredSize usw ;)

Danke

edit: Ich hab noch ne Frage zu SWT ich will dafür jetzt nicht nen eigenen Thread eröffnen. Und zwar frage ich mich wie ich eig. Komponenten löschen kann in SWT. Diese ScrolledComposite dient für ein Log, d.h. ich adde zum scrollcontent einfach Labels untereinandern.
Wenn man jetzt den Prozess neu startet soll der alte Log verschwinden und ein neuer starten, d.h. ich müsste erstmal alle Labels wieder entfernen.. Wie geht das?

Thx
 
Zuletzt bearbeitet:
G

Gast2

Gast
setMinSize sagt aus ab wann er anfangen zu scrollen soll...
Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

/**
 * This class demonstrates ScrolledComposite
 */
public class ScrolledCompositeTest {
  public void run() {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setSize(100,100);
    createContents(shell);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    display.dispose();
  }

  private void createContents(Composite parent) {
    parent.setLayout(new FillLayout());

    ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL
            | SWT.V_SCROLL);
     
        Composite child = new Composite(sc, SWT.NONE);
        FillLayout fillLayout = new FillLayout();
        fillLayout.type = SWT.VERTICAL;
        child.setLayout(fillLayout);
        for (int i = 0; i < 10; i++) {
            Label l = new Label(child, SWT.LEFT);
            l.setText("Msg # " + i);
        }
        sc.setContent(child);
        sc.setMinSize(80, 200);
        sc.setExpandHorizontal(true);
        sc.setExpandVertical(true);
  }

  public static void main(String[] args) {
    new ScrolledCompositeTest().run();
  }
}

EDIT:
Um Elemen zu löschen kannst du sowas hier machen
Java:
  private void removeAllElements(Composite child) {
	for(Control control : child.getChildren()){
		control.dispose();
	}
	child.redraw();
  }

EDIT EDIT: Oder du disposed die child Composite und baust diese neu auf... je nachdem
 
Zuletzt bearbeitet von einem Moderator:

hdi

Top Contributor
Also das klappt bei mir nicht. Vermutlich weil ich keine absolute Größe für die Shell angebe, sondern ein Layout dafür verwende. Ich weiß jetzt nicht mit was das zusammenhängt deshalb poste ich mal eine abgekürzte Version meines Shell-Inhalts (Die Shell ist "dialog").
Übrigens hab ich den Content jetzt geändert es ist ja umständlich einzelne Labels zu adden, ich hab jetzt einfach ein einziges Label, SWT beherrscht ja Zeilenumbruch im Text eines Labels :)

Java:
        dialog = new Shell(eclipse, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
      
	Label instructions = new Label(dialog, SWT.LEFT);
        GridData gd = new GridData();
	gd.horizontalSpan = 2;
	instructions.setLayoutData(gd);

	Group fileGroup = new Group(dialog, SWT.SHADOW_ETCHED_IN);
	fileGroup.setLayout(new RowLayout());
	fileGroup.setText("....");
	Text path = new Text(fileGroup, SWT.BORDER);
	path.setLayoutData(new RowData(280, 15));

	Button browse = new Button(fileGroup, SWT.PUSH);
	browse.setText("Browse...");
	browse.setLayoutData(new RowData(80, 20));

	gd = new GridData();
	gd.horizontalSpan = 2;
	gd.horizontalAlignment = GridData.FILL;
	fileGroup.setLayoutData(gd);
	fileGroup.pack();

	Group projectNameGroup = new Group(dialog, SWT.SHADOW_ETCHED_IN);
	projectNameGroup.setLayout(new RowLayout());
	projectNameGroup.setText("...");
	Text projectName = new Text(projectNameGroup, SWT.BORDER);
	projectName.setLayoutData(new RowData(280, 15));

	gd = new GridData();
	gd.horizontalSpan = 2;
	gd.horizontalAlignment = GridData.FILL;
	projectNameGroup.setLayoutData(gd);
	projectNameGroup.pack();

	Label tmp = new Label(dialog, SWT.LEFT);
	tmp.setLayoutData(new GridData(350, 15));

	ScrolledComposite sc = new ScrolledComposite(dialog, SWT.BORDER
		| SWT.V_SCROLL);
	gd = new GridData();
	gd.horizontalSpan = 2;
	gd.horizontalAlignment = GridData.FILL;
	sc.setLayoutData(gd);

	Composite scrollContent = new Composite(sc, SWT.NONE);
	FillLayout fillLayout = new FillLayout();
	fillLayout.type = SWT.VERTICAL;
	scrollContent.setLayout(fillLayout);
	Label log = new Label(scrollContent, SWT.LEFT);
	log.setText("Test\nTest\nTest\nTest\nTest\nTest\nTest\nTest\nTest\nTest\nTest\nTest");
	
	sc.setContent(scrollContent);
	sc.setMinSize(80,80);
	sc.setExpandHorizontal(true);
	sc.setExpandVertical(true);

	Button go = new Button(dialog, SWT.PUSH);
	go.setText("...");
	gd = new GridData();
	gd.horizontalAlignment = GridData.FILL;
	gd.horizontalSpan = 2;
	go.setLayoutData(gd);

	GridLayout grid = new GridLayout();
	grid.numColumns = 2;
	dialog.setLayout(grid);
	dialog.pack();
	dialog.setLocation(getRelativeLocation(eclipse, dialog));

Jo also in diesem Fall mit dem einzigen Label ist die ScrolledComposite tatsächlich nur so groß wie per setMinSize() angegeben (zumindest was die Höhe anbelangt), allerdings sehe ich nach wie vor keine Scrollbalken, d.h. man sieht halt nur die ersten paar Zeilen vom Label und der Rest ist einfach abgeschnitten :bahnhof:
 
Zuletzt bearbeitet:

hdi

Top Contributor
Here you go. Man kann bei setMinSize() einstellen was man will, das Ding wird immer so groß dass alle Labels reinpassen.

Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class SWTScrolledComposite {

    public static void main(String[] args) {

	Shell shell = new Shell();

	ScrolledComposite sc = new ScrolledComposite(shell, SWT.BORDER
		| SWT.V_SCROLL);
	GridData gd = new GridData();
	gd.horizontalSpan = 2;
	gd.horizontalAlignment = GridData.FILL;
	sc.setLayoutData(gd);
	Composite composite = new Composite(sc, SWT.NONE);
	FillLayout fillLayout = new FillLayout();
	fillLayout.type = SWT.VERTICAL;
	composite.setLayout(fillLayout);
	
	for (int i = 0; i < 10; i++) {
	    Label l = new Label(composite, SWT.LEFT);
	    l.setText("Msg # " + i);
	}

	sc.setContent(composite);
	sc.setMinSize(100, 50);
	sc.setExpandHorizontal(true);
	sc.setExpandVertical(true);

	GridLayout grid = new GridLayout();
	grid.numColumns = 2;
	shell.setLayout(grid);
	shell.pack();

	shell.open();
	Display display = shell.getDisplay();
	while (!shell.isDisposed()) {
	    if (!display.readAndDispatch()) {
		display.sleep();
	    }
	}
    }

}
 
G

Gast2

Gast
Ich glaub eher des liegt an deiner shell...

Java:
public class SWTScrolledComposite {
 
    public static void main(String[] args) {
 
    Shell shell = new Shell();
 
    ScrolledComposite sc = new ScrolledComposite(shell, SWT.BORDER
        | SWT.V_SCROLL);
    GridData gd = new GridData();
    gd.horizontalSpan = 2;
    gd.horizontalAlignment = GridData.FILL;
    sc.setLayoutData(gd);
    Composite composite = new Composite(sc, SWT.NONE);
    FillLayout fillLayout = new FillLayout();
    fillLayout.type = SWT.VERTICAL;
    composite.setLayout(fillLayout);
    
    for (int i = 0; i < 10; i++) {
        Label l = new Label(composite, SWT.LEFT);
        l.setText("Msg # " + i);
    }
 
    sc.setContent(composite);
    sc.setMinSize(200, 200);
    sc.setExpandHorizontal(true);
    sc.setExpandVertical(true);
 
    shell.setLayout(new FillLayout());
    shell.setSize(200,200);
 
    shell.open();
    Display display = shell.getDisplay();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
        display.sleep();
        }
    }
    }
 
}

set MinSize sagt nicht aus wie groß die ScrolledComposite wird...sondern nur ab wann sie scrollen soll... des andere macht dein LayoutManager drum herum...
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Schau mal hier das ist was du wahrscheinlich suchst...

Du musst deinem LayoutManager welches das ScrolledComposite einbetet sagen was er machen darf und was nicht. Da du ein GridLayout hast solltest du dir unbedingt die Klasse GridDataFactory anschauen die erleichtert dir deine arbeit ungemein.
Schau dir die Zeile an:
Java:
GridDataFactory dataFactory = GridDataFactory.swtDefaults().align(SWT.FILL, SWT.FILL).hint(SWT.DEFAULT, 50).grab(true, true);
dataFactory.applyTo(sc);

Java:
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
 
public class SWTScrolledComposite {
 
    public static void main(String[] args) {
 
    Shell shell = new Shell();
 
    ScrolledComposite sc = new ScrolledComposite(shell, SWT.BORDER
        | SWT.V_SCROLL);
    GridDataFactory dataFactory = GridDataFactory.swtDefaults().align(SWT.FILL, SWT.FILL).hint(SWT.DEFAULT, 50).grab(true, true);
    dataFactory.applyTo(sc);
    Composite composite = new Composite(sc, SWT.NONE);
    FillLayout fillLayout = new FillLayout();
    fillLayout.type = SWT.VERTICAL;
    composite.setLayout(fillLayout);
    
    for (int i = 0; i < 10; i++) {
        Label l = new Label(composite, SWT.LEFT);
        l.setText("Msg # " + i);
    }
 
    sc.setContent(composite);
    sc.setMinSize(100, 150);
    sc.setExpandHorizontal(true);
    sc.setExpandVertical(true);
 
    GridLayout grid = new GridLayout();
    grid.numColumns = 2;
    shell.setLayout(grid);
    shell.pack();
 
    shell.open();
    Display display = shell.getDisplay();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
        display.sleep();
        }
    }
    }
 
}
 

hdi

Top Contributor
Jo danke Leute, in der zwischenzeit habe ich allerdings die Labels auf der Composite ersetzt durch einen Table, und damit funktioniert es komischerweise tadellos...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A SWT ScrolledComposite wird nicht angezeigt AWT, Swing, JavaFX & SWT 0
B SWT ScrolledComposite mag mich nicht AWT, Swing, JavaFX & SWT 18
reibi SWT ScrolledComposite zurückscrollen AWT, Swing, JavaFX & SWT 4
lumo SWT ScrolledComposite MouseWheel verhindern AWT, Swing, JavaFX & SWT 3
lumo SWT ScrolledComposite Smooth Scrolling AWT, Swing, JavaFX & SWT 2
F SWT ScrolledComposite AWT, Swing, JavaFX & SWT 2
lumo SWT ScrolledComposite maximierter inhalt AWT, Swing, JavaFX & SWT 2
B Inhalt eines ScrolledComposite ändern AWT, Swing, JavaFX & SWT 5
T RCP-SWT dynamisches ScrolledComposite AWT, Swing, JavaFX & SWT 2
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
P kein Scrollen nach affinertransformation bei mouse dragged AWT, Swing, JavaFX & SWT 2
S JavaFX JavaFX TableView scrollen färbt falsche Zeilen AWT, Swing, JavaFX & SWT 1
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
J JList scrollen AWT, Swing, JavaFX & SWT 3
Bluedaishi JTextArea gefundene Zeile nach Oben Scrollen AWT, Swing, JavaFX & SWT 13
P Swing Horizontales Scrollen mit Shift-Mausrad AWT, Swing, JavaFX & SWT 2
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
W JavaFX Scrollpane elementweise scrollen AWT, Swing, JavaFX & SWT 4
Thallius Automatisches Scrollen zum aktiven JTextView klappt nicht AWT, Swing, JavaFX & SWT 2
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
W Swing Zum Ende einer Scrollpane scrollen AWT, Swing, JavaFX & SWT 2
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
S JavaFX Mehrere TreeTableView's synchron scrollen AWT, Swing, JavaFX & SWT 0
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
O Swing JTable per Scrollen füllen! AWT, Swing, JavaFX & SWT 7
J AWT choice mit viel Auswahl aktualisiert sich nicht korrekt beim scrollen?! AWT, Swing, JavaFX & SWT 3
P Durch Bilder Scrollen AWT, Swing, JavaFX & SWT 2
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
J JTable wird bei scrollen falsch gezeichnet AWT, Swing, JavaFX & SWT 3
N Touchscreen-Scrollen, wo liegt der Fehler? AWT, Swing, JavaFX & SWT 3
S Swing Scrollpanes: wie kann ich durch Java-Code an den "Anfang" scrollen AWT, Swing, JavaFX & SWT 8
G JTable zentriert scrollen AWT, Swing, JavaFX & SWT 2
D SWING - Ein Composite scrollen AWT, Swing, JavaFX & SWT 6
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
D Swing JScrollbar ganz nach unten scrollen AWT, Swing, JavaFX & SWT 2
K SWT treeviewer scrollen AWT, Swing, JavaFX & SWT 8
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
J Lazy Loading eine JTree während Scrollen AWT, Swing, JavaFX & SWT 11
A Swing Scrollen über JPane AWT, Swing, JavaFX & SWT 20
Dit_ JTextArea zu Zeile X scrollen AWT, Swing, JavaFX & SWT 4
S SWT Zwei Tabellen gleichzeitig Scrollen AWT, Swing, JavaFX & SWT 3
Dragonfire Swing JPanel nur vertikal scrollen AWT, Swing, JavaFX & SWT 4
T In einem Label scrollen AWT, Swing, JavaFX & SWT 3
A Swing JScrollPane ans ende Scrollen AWT, Swing, JavaFX & SWT 9
W SwingX Problem mit Scrollen von 2 JXTaskPaneContainer AWT, Swing, JavaFX & SWT 3
S Swing Scrollen ohne Leiste? AWT, Swing, JavaFX & SWT 2
J wie Scrollen? AWT, Swing, JavaFX & SWT 3
R Zu selektiertem Column in JTable scrollen? AWT, Swing, JavaFX & SWT 2
P Drei Scrollpanes gleichzeitig scrollen AWT, Swing, JavaFX & SWT 3
G Scrollen per mouseDragged (JScrollPane) AWT, Swing, JavaFX & SWT 8
H jScrollPane ohne Scrollen AWT, Swing, JavaFX & SWT 2
G Mehrere JScrollPanes gekoppelt scrollen AWT, Swing, JavaFX & SWT 2
G JTable in JScrollPane - nach unten scrollen AWT, Swing, JavaFX & SWT 11
S JList automatisch scrollen AWT, Swing, JavaFX & SWT 8
D JScrollPane incl. thumbnails, soll fluessig scrollen! AWT, Swing, JavaFX & SWT 3
J JScrollPane soll automatisch zu einem punkt scrollen AWT, Swing, JavaFX & SWT 4
P JPopupMenu scrollen AWT, Swing, JavaFX & SWT 2
J JList Scrollen AWT, Swing, JavaFX & SWT 8
M PerformanceProbleme(Beim Scrollen ruckelt es) AWT, Swing, JavaFX & SWT 16
Z JTable automatisch zu einer Zeile scrollen AWT, Swing, JavaFX & SWT 4
D JScrollPane mit Grafiken scrollen lassen AWT, Swing, JavaFX & SWT 2
G 3 oder mehr JTable nebeneinander gleichzeitig vert. scrollen AWT, Swing, JavaFX & SWT 4
R JTextPane scrollen vermeiden AWT, Swing, JavaFX & SWT 2
S JScrollPane > JPanel - automatisch scrollen AWT, Swing, JavaFX & SWT 2
R Einstellen der Maus Rad Geschwindigkeit beim Scrollen AWT, Swing, JavaFX & SWT 3
I In JPopupMenu scrollen AWT, Swing, JavaFX & SWT 4
S Scrollen AWT, Swing, JavaFX & SWT 2
Q ||| Scrollen mal anders - Console mitscrollender Text??? AWT, Swing, JavaFX & SWT 6
G Problem mit horizontal und vertikal scrollen AWT, Swing, JavaFX & SWT 2
M Scrollen - Geschwindigkeit - Scrollgeschwindigkeit AWT, Swing, JavaFX & SWT 2
G JScrollPane - scrollen mit Pfeiltasten AWT, Swing, JavaFX & SWT 3
J Wie kann man beim BoxLayout scrollen? Keine Scrollleiste!:-( AWT, Swing, JavaFX & SWT 7
R JTable zu einem bestimmten Eintrag automatisch scrollen? AWT, Swing, JavaFX & SWT 2
A Scrollpane verschmiert beim scrollen AWT, Swing, JavaFX & SWT 5
S Position von Labels, Buttons, etc. festsetzen und Scrollen AWT, Swing, JavaFX & SWT 4
N JTable scrollen AWT, Swing, JavaFX & SWT 4
F 3 JTextAreas zusammen scrollen AWT, Swing, JavaFX & SWT 5
O JScrollPane beinhaltet JPanel mit null Layout kein Scrollen AWT, Swing, JavaFX & SWT 3
G Scrollen ohne scrolleisten AWT, Swing, JavaFX & SWT 5
T JTextPane in JScrollPane NICHT autom. nach unten scrollen AWT, Swing, JavaFX & SWT 3
M JScrollPane immer bis ganz nach unten scrollen lassen AWT, Swing, JavaFX & SWT 5
J Streifen beim Scrollen AWT, Swing, JavaFX & SWT 3
F Scrollen bei JTextArea in einem Null-Layout? Unmöglich? AWT, Swing, JavaFX & SWT 4
M JScrollPane soll automatisch scrollen AWT, Swing, JavaFX & SWT 5
N JScrollPane schneller scrollen AWT, Swing, JavaFX & SWT 3
V Automatisches Scrollen bei JScrollPane AWT, Swing, JavaFX & SWT 10
N Scrollen in einem Panel AWT, Swing, JavaFX & SWT 5
S jScrollPane ganz nach unten scrollen AWT, Swing, JavaFX & SWT 4
B In JScrollPane eingebettetes JEditorPane scrollen AWT, Swing, JavaFX & SWT 2
M Scrollprobleme - Panelinhalte bleiben beim Scrollen AWT, Swing, JavaFX & SWT 2
Z JTextArea in JScrollPane automatisch scrollen AWT, Swing, JavaFX & SWT 2
K JPanle scrollen . AWT, Swing, JavaFX & SWT 2
V Probleme beim Scrollen ein JPanels mit JScrollPane AWT, Swing, JavaFX & SWT 2
G JTable automatisch scrollen AWT, Swing, JavaFX & SWT 4
S Automatisches Scrollen in einer JTextArea AWT, Swing, JavaFX & SWT 6
A Scrollen von Fenster geht nicht AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben