Het formaat van een ExpandItem wordt springerig

Ik heb een schuifbalk die een grootte van een StyledText activeert en de hoogte van het ExpandItem waarin het leeft. Het wordt "springerig". Met andere woorden, de StyledText heeft de neiging om uit te breiden naar de gewenste grootte en keert vervolgens terug naar de oorspronkelijke grootte terwijl het formaat wordt gewijzigd. Uiteindelijk komt alles op de juiste plek terecht, maar het is een lelijke overgang.

Wat kan ik in de volgende code veranderen om van de "jumpiness" af te komen?

 public static void main(String[] args) {
    final Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout(SWT.VERTICAL));
    shell.setSize(400, 400);

    //Create the expand bar
    ExpandBar expandBar1=new ExpandBar(shell,SWT.None);

    //Create the first expand item.
    final ExpandItem expandItem1=new ExpandItem(expandBar1,SWT.None);
    final Composite composite=new Composite(expandBar1,SWT.NONE);
    final RowLayout layout=new RowLayout(SWT.VERTICAL);
    composite.setLayout(layout);
    expandItem1.setControl(composite);
    expandItem1.setHeight(100);

    //Add text
    final StyledText one=new StyledText(composite,SWT.BORDER|SWT.MULTI|SWT.WRAP|SWT.V_SCROLL);
    one.setText("aaaa\nbbbbbb\nccccc\ndddd");

    //Add a sash
    final Sash sash1=new Sash(composite,SWT.HORIZONTAL);
    sash1.setSize(sash1.getSize().x, 10);
    sash1.addListener(SWT.Selection,new Listener(){
        @Override
        public void handleEvent(Event event) {
            one.setSize(one.getSize().x,event.y);
            sash1.setLocation(0, event.y+5);
            expandItem1.setHeight(event.y+10);
            composite.redraw();
        }
    });

    //Create the second expand item.
    ExpandItem expandItem2=new ExpandItem(expandBar1,SWT.None);
    Composite composite2=new Composite(expandBar1,SWT.None);
    composite2.setLayout(new FillLayout());
    StyledText two=new StyledText(composite2,SWT.V_SCROLL);
    two.setText("two\nabadfae\nasdfaef\nadfef\nesfj;lef\nefsfe\nasefae\n...");
    expandItem2.setControl(composite2);
    expandItem2.setHeight(100);

    //Final junk
    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) display.sleep();
    }
    display.dispose();
}

Opmerking: Aarzel niet om andere tips te geven voor het verbeteren van deze code. Ik ben nieuw bij SWT.

2
Ubuntu 12 onder Gnome.
toegevoegd de auteur User1, de bron
Ik probeerde ook een RHEL6-machine en zag het probleem nog steeds. Eerst breid ik het bovenste expandItem uit en versleep dan de sjerp die zich tussen het tekstvak en het volgende expandItem bevindt. Terwijl ik sleep, verandert het tekstvak 'springerig' van formaat. Ik laat de muisknop los en alles landt waar het hoort.
toegevoegd de auteur User1, de bron
Heel erg bedankt voor uw hulp. Het idee van de sjerp is om de grootte van de inhoud van het uitvouwitem te wijzigen. Wanneer dit volledig is geïmplementeerd, heeft elk expandItem een ​​tabelklasse met verschillende gegevensrijen (ik gebruik StyledText nu voor de proof of concept). De gebruiker wil bepaalde rijen van bepaalde tabellen visueel vergelijken. Het idee is om de gebruiker toe te staan ​​dat segmenten van twee of meer tabellen een beperkte spatie krijgen. De sjerp in het eindproduct zal meer uitgesproken zijn voor de gebruiker.
toegevoegd de auteur User1, de bron
Ik zal die optie overwegen. Iets anders merkte ik op dat als ik de grootte van expandItem1 niet aanpas, de grootte van het formaat vloeiend is. In de praktijk betekent dit dat je de besturing alleen kunt verkleinen, maar ik vraag me af door welke gebeurtenis de defecte hakmaat wordt aangeroepen.
toegevoegd de auteur User1, de bron
Nu weet ik precies wat je bedoelt en ik kan het bevestigen. Ik kan nu geen oplossing bieden, maar ik denk dat het zou helpen als je uitlegt wat je probeert te doen met het plaatsen van een sjerp (die gebruikers nauwelijks zouden opmerken) in die plaats?
toegevoegd de auteur phineas, de bron
Hm, ik denk dat de reden voor jumpiness de SelectionListener on the Sash-widget is. Je zou het waarschijnlijk moeten verwijderen en het layoutbeheer moeten laten staan ​​en volledig van formaat moeten veranderen naar SWT. Het is niet bevredigend, maar misschien zijn ExpandItems gewoon niet de beste container-widgets voor aanpasbare items.
toegevoegd de auteur phineas, de bron

Geen antwoorden

0