Frage

Ich versuche, eine Anwendung zu erstellen, die ein StyledText Feld innerhalb eines ScrolledComposite angezeigt enthält. Ich habe Schwierigkeiten, eine große Anzahl von Linien in meinem StyledText Feld anzuzeigen (über 2550 scheint Ursache Probleme).

Die StyledText Box darf nicht selbst eine Bildlaufleiste, sondern muss über die ScrolledComposite scrollbaren sein. Da gibt es noch andere Elemente unterhalb und oberhalb dem StyledText dass Notwendigkeit, scrollbaren zu sein, und ich will nicht mehr Bildlaufleisten.

Daher mit großen Mengen an Daten, die ich habe eine sehr große (wie in der Höhe) StyledText Feld, das nach einer bestimmten Höhe zu stoppen scheint.

Screenshot

Das Problem ist, dass die StyledText sollte so groß sein Inhalt ist und es nicht ist. Der Grund für die Lücke unterhalb ist, dass der Verbundstoff ist Ändern der Größe, was StyledText berichtet über seine Höhe sein, aber das ist in der Tat nicht seine Höhe.

Hier ist ein Stück vereinfachte Beispielcode mein Problem zu veranschaulichen:

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;


public class ExpandBox2
{
    public static void main(String[] args)
    {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("Example");
        shell.setLayout(new FillLayout());

        ScrolledComposite scrolledComposite = new ScrolledComposite(shell, SWT.V_SCROLL);
        scrolledComposite.setLayout(new FillLayout(SWT.VERTICAL));

            Composite mainComp = new Composite(scrolledComposite, SWT.NONE);
        mainComp.setLayout(new FillLayout(SWT.VERTICAL));

        StyledText styledText = new StyledText(mainComp, SWT.NONE);
        styledText.getContent().setText(bigString());

        mainComp.setSize(mainComp.computeSize(SWT.DEFAULT, SWT.DEFAULT));

        scrolledComposite.setContent(mainComp);
        scrolledComposite.setMinSize(mainComp.computeSize(SWT.DEFAULT, SWT.DEFAULT));
        scrolledComposite.setExpandHorizontal(true);
        scrolledComposite.setExpandVertical(true);
        scrolledComposite.getVerticalBar().setIncrement(10);


        shell.setSize(400, 350);
        shell.open();
        while (!shell.isDisposed ()) {
            if (!display.readAndDispatch ()) {
                display.sleep ();
            }
        }
        display.dispose();

    }

    private static String bigString()
    {
        String big = "";

        for(int i=0;i<10000;i++)
        {
            big = big + "hello\r\n";
        }

        return big;
    }

}

Update: Interessanterweise tritt dieses Problem mit SWT Etiketten- und SWT Text

War es hilfreich?

Lösung

Dies ist tatsächlich eine Windows-Beschränkung. Composites nur von einer bestimmten Größe in Fenstern sein kann, nicht mehr als 32767 (Pixel, nehme ich an).

Dies ist Fund für die scrolledComposite, weil es nicht wirklich ist> 32767, wie es scheint nur zu sein. Während bei der mainComp die tatsächliche Größe ist> 32767 und das ist, wo wir abgeschnitten werden.

Am Anfang dachte ich, das war eine Eclipse-Bug und reichte einen Bericht, in dem ich mitgeteilt wurde, dass dies ein Windows-Problem / Feature: https://bugs.eclipse.org/bugs/show_bug.cgi?id=333111

Andere Tipps

Vielleicht könnten Sie dieses Problem lösen, indem sie die andere Weise herum gehen und platzieren Sie Ihre „andere Dinge“ in der StyledText? Und dann machen folglich die StyledText Scroll anstelle des ScrolledComposite. StyledText hat die Unterstützung sowohl Bilder als auch Kontrollen für die Einbettung, und Sie sind in der Lage Zuhörer zu implementieren (zB VerifyListener), um den Benutzer zu verhindern, das eingebettete Objekt zu löschen -. Wenn es das ist, was Sie wollen

Hier ist ein Beispielcode:

Wenn Sie Ihre Kontrollen wollen besser aussehen als im zweiten Beispiel können Sie Ihre Kontrollen nehmen die gesamte Breite des Textbereichs machen (und hören Sie Veranstaltungen für, wenn der Bereich der Größe verändert wird - Verwendung styledText.addListener(SWT.Resize, new Listener() ...).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top