logo       

AW: ulcscrollbar --> force to scroll to top --> found workaround: msg#00180

java.ulc.devel

Subject: AW: ulcscrollbar --> force to scroll to top --> found workaround

Hi *,

i have solved my problem by adding an extension to the ulcscrollbar. it simply
adds an container listener to the containers of the scrollbar and calls
scrollbar.setValue(0) any time an component is added. this is done in
swingutils.invoke later to ensure that the adding process is finished.
otherwise the adding of the new component forces the scrollpane to scroll down
again. i know the code itself is maybe not the nicest and most performant but
it works. any advice, sugestion or help is welcome.

here is my extension class (client):

import java.awt.Component;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;

import javax.swing.SwingUtilities;

import com.ulcjava.base.client.UIComponent;
import com.ulcjava.base.client.UIContainer;
import com.ulcjava.base.client.UIScrollPane;
import com.ulcjava.base.client.UiJScrollPane;
import com.ulcjava.base.shared.internal.Anything;

/**
* client widget. scrolls always to to if a component is added to an container
placed in the scrollpane
*
* @author <a href="mailto:robert.munsky@xxxxxxxxxxxxxx";>Robert Munsky</a>
*/
public class UITopScrollableScrollPane extends UIScrollPane {
/**
*
* {@inheritDoc}
*/
protected void addComponent(com.ulcjava.base.client.UIComponent
component,
java.lang.Object constraints, int index) {
super.addComponent(component, constraints, index);
if (component instanceof UIContainer) {
UIContainer boxPane = (UIContainer) component;
ContainerListener containerListener = new
ContainerListener() {

public void componentRemoved(ContainerEvent e) {
tryToScrollToTop();
}

public void componentAdded(ContainerEvent e) {
tryToScrollToTop();
}

private void tryToScrollToTop() {
SwingUtilities.invokeLater(new
Runnable() {

public void run() {
scrollToTop();
}
});
}

};

boxPane.getBasicContainer().addContainerListener(containerListener);
}
}
/**
* konstr
*
*/
public UITopScrollableScrollPane() {
super();
}

/**
*
* {@inheritDoc}
*/
public void handleRequest(String request, Anything args) {
if (request.equals("scrollToTop")) { //$NON-NLS-1$
scrollToTop();
} else {
super.handleRequest(request, args);
}
}

/**
* scrollt to top
*
* @author <a href="mailto:robert.munsky@xxxxxxxxxxxxxx";>Robert
Munsky</a>
*/
public void scrollToTop() {
Component container = getBasicComponent();
if (container != null && (container instanceof UiJScrollPane)) {

final UiJScrollPane scrollPane = (UiJScrollPane)
container;
SwingUtilities.invokeLater(new Runnable() {

public void run() {

scrollPane.getVerticalScrollBar().setValue(0);
}

});
}
}

}



> -----Ursprüngliche Nachricht-----
> Von: Munsky, Robert
> Gesendet: Donnerstag, 27. Juli 2006 09:38
> An: 'Ulc-Developer@xxxxxxxxxxxxxxx'
> Betreff: ulcscrollbar --> force to scroll to top
>
>
> Hello *,
>
> first of all thanks to the ulc community for the fast and
> good help. it is very nice to work with the canoo framework
> and have such a good support and community background. thiis
> is one reason, beside the technical aspects, which let
> recommend the framework to other developers.
>
> after all the nice words there is a question:
>
> i add dynamicaly a lot of componets to a box pane which lays
> inside a scrollpane. after adding all comps tzo the inner
> boxpane the scrollpane always scrolls to the end. thats not
> what the user expects, he wants to see the beginning. i have
> tried som methods such as
>
> fScrollPane.getVerticalScrollBar().setPosition() and some mor
> but nothing helps. I think there is some background mecanic
> which works different. i do not want to try it with native
> swing and hope to find an answer here. if not i will try it
> in swing and do an extension to ulc. but i think there must
> be a way or a workaround as always. maybe someone had the
> same problem and can deliver a work around or a code snippet?
>
> Thanks in advance,
>
> Robert
>


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise