6 Stimmen

GWT - Abrufen der Größe eines Widgets, das nicht angezeigt wird

Ich brauche, um die Größe eines absolutePanel in Bezug auf seine Kind-Größe zu setzen, aber die getOffset* Methoden zurückgeben 0, weil (ich denke) das Kind noch nicht angezeigt wurde.

Ein schnelles Beispiel:

AbsolutePanel aPanel = new AbsolutePanel();
HTML text = new HTML(/*variable lenght text*/);
int xPosition = 20; // actually variable
aPanel.add(text, xPosition, 0);
aPanel.setSize(xPosition + text .getOffsetWidth() + "px", "50px"); // 20px 50px

Ich könnte mein Problem auch lösen, indem ich die AbsolutePanel-Größe verwende, um die untergeordnete Position und Größe festzulegen:

AbsolutePanel aPanel = new AbsolutePanel();
aPanel.setSize("100%", "50px");
HTML text = new HTML(/*variable lenght text*/);
int xPosition = aPanel.getOffsetWidth() / 3; // Once again, getOffsetWidth() returns 0;
 aPanel.add(text, xPosition, 0);

In beiden Fällen muss ich einen Weg finden, entweder:

  • die Größe eines Widgets abrufen, das noch nicht angezeigt wurde
  • benachrichtigt werden, wenn ein Widget angezeigt wird

4voto

phb Punkte 41

Widget hat eine onLoad()-Methode, die Sie überschreiben können, die ausgelöst wird, wenn das Widget an das DOM angehängt wird, wobei getOffsetWidth() dann die gerenderte Textgröße zurückgibt - es sei denn, das Widget, in dem sich Ihre Zeichenkette befindet, hat bereits eine Größe zugewiesen. Wenn Sie tun können, was Sie mit CSS (einschließlich vielleicht nur Einstellung "overflow: sichtbar;"), das ist wahrscheinlich besser, aber manchmal müssen Sie wirklich die Größe, und diese Technik wird es Ihnen geben.

2voto

markovuksanovic Punkte 15096

Ich denke, Sie sollten versuchen, dieses Problem mit CSS-Stilen zu lösen. Wenn ich Sie wäre, würde ich versuchen, einen Stil für übergeordnete und/oder absolute Panel, mit addStyle oder addStyleNames. Vielleicht so etwas wie...

AbsolutePanel aPanel = new AbsolutePanel();
aPanel.setSize("100%", "50px");
HTML text = new HTML(/*variable lenght text*/);
text.addStyleName("my-custom-style");

in css würden Sie einen css-Stil erstellen, der dann Ihr Widget entsprechend vergrößern würde.

Der andere Ansatz wäre: ....

Sie könnten eine Funktion erstellen, die ein HTML-Widget in genau der von Ihnen benötigten Größe erzeugt.

Hier ist etwas Code für Sie, um Ihnen den Einstieg zu erleichtern:

public native void customizeHTMLElement(Element elem, String widthInPx) /*-{ 
  elem.style.width = widthInPx;   //this is basically pure js. 
}-*/ 

Then somewhere within your widget make a call to the above function like

public void foo() {
  ...
  customizeHTMLElement(someElement, "20");
  ...
}

Einige Informationen über JSNI - http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html

1voto

user2214390 Punkte 11

Sie sollten getOffsetHeight() erst aufrufen, nachdem das Widget platziert und berechnet wurde. So hat GWT

com.google.gwt.core.client.Scheduler

Klasse, um dies zu tun.

In meinem Projekt verwende ich LayoutPanel, um das Menü oben und andere Inhalte in der Mitte anzuzeigen. Aber ich weiß nicht, die Größe des Menüs. Also stelle ich Informationen zu LayoutPanel berechnet mit getOffsetHeight wie folgt:

layoutPanel.add(widget);
Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand()
{
    public void execute()
    {
        int offsetHeight = widget.getOffsetHeight();
        layoutPanel.setWidgetTopHeight(widget, 0, Style.Unit.PX, offsetHeight, Style.Unit.PX);
    }
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X