You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@pivot.apache.org by Chris Bartlett <cb...@gmail.com> on 2011/02/02 14:06:38 UTC

Re: getting object fron its container

 The Container#getNamedComponent(String) method is defined here
http://svn.apache.org/repos/asf/pivot/trunk/wtk/src/org/apache/pivot/wtk/Container.java

You can see that it only iterates over the direct child Components in the
Container and then checks for a matching name property.
It does *not* check to see if those Components are actually instances of
Container, and then recursively iterate over them.

It appears that none of the standard Pivot Containers override this method
at look into child Containers, so you would need to roll your own method if
you need to do that.


Bear in mind that theContainer#getNamedComponent(String) method attempts to
match against Component#getName().
BXMLSerializer sets the Component's name property to the same value as the
bxml:id as a convenience, but these are 2 separate values.

The Component's name can be set explicity in BXML as follows.
<PushButton bxml:id="Button1" name="Foo" buttonData="%Button1”/>
or in java (including at runtime) with
myComponent.setName("Foo");

If you wanted to find this PushButton by name you would have to supply a
value of "Foo", and not "Button1"


It will often be more convenient to use the @BXML annotation to pick up
objects in your code.
The section titled 'The Bindable Interface' in the following tutorial
contains more info.
http://pivot.apache.org/tutorials/stock-tracker.ui.html

Chris

On 2 February 2011 17:43, Aanjaneya Shukla <aa...@vmware.com> wrote:

> Hi,
>
> I am having some issues using ‘getNamedComponent’ method.
>
>
>
> BXML file:
>
> <PushButton bxml:id="Button1" buttonData="%Button1”/>
>
>
>
> Java file:
>
> PushButton Button1 = (PushButton)window.getNamedComponent("Button1");
>
>
>
> I want to get Button object but I have getting null value returned.
>

RE: getting object fron its container

Posted by Aanjaneya Shukla <aa...@vmware.com>.
Getting buttons from a container or say textboxes. One has to recursively iterate the container, is that the only choice. 
________________________________________
From: Greg Brown [gk_brown@verizon.net]
Sent: Wednesday, February 02, 2011 22:03
To: user@pivot.apache.org
Subject: Re: getting object fron its container

Maybe you should use an interface that defines a getButton() method. That would be more type-safe.

On Feb 2, 2011, at 8:24 AM, Aanjaneya Shukla wrote:

> Okay, but if I have multiple Window object and I randomly load an object into my frame. In this case I have access to only the Container object and if I have to suppose disable a button in my window then I need the Button object. And in this case I don't have location of bxml file, hence I don't think BXMLSerializer can be used.
>
> Thanks
>
> ________________________________________
> From: Greg Brown [gk_brown@verizon.net]
> Sent: Wednesday, February 02, 2011 20:53
> To: user@pivot.apache.org
> Subject: Re: getting object fron its container
>
> Actually, because the BXML ID value is mapped to Component#setName() via the IDProperty annotation, you could also get the button in the example below via getNamedComponent("Button1").
>
> However, as Chris noted, getNamedComponent() is not recursive. If you want access to all values declared with IDs in your BXML file, you should use BXMLSerializer.getNamespace().get() or implement Bindable in your root element.
>
> G
>
> On Feb 2, 2011, at 5:06 AM, Chris Bartlett wrote:
>
> The Container#getNamedComponent(String) method is defined here
> http://svn.apache.org/repos/asf/pivot/trunk/wtk/src/org/apache/pivot/wtk/Container.java
>
> You can see that it only iterates over the direct child Components in the Container and then checks for a matching name property.
> It does *not* check to see if those Components are actually instances of Container, and then recursively iterate over them.
>
> It appears that none of the standard Pivot Containers override this method at look into child Containers, so you would need to roll your own method if you need to do that.
>
>
> Bear in mind that theContainer#getNamedComponent(String) method attempts to match against Component#getName().
> BXMLSerializer sets the Component's name property to the same value as the bxml:id as a convenience, but these are 2 separate values.
>
> The Component's name can be set explicity in BXML as follows.
> <PushButton bxml:id="Button1" name="Foo" buttonData="%Button1”/>
> or in java (including at runtime) with
> myComponent.setName("Foo");
>
> If you wanted to find this PushButton by name you would have to supply a value of "Foo", and not "Button1"
>
>
> It will often be more convenient to use the @BXML annotation to pick up objects in your code.
> The section titled 'The Bindable Interface' in the following tutorial contains more info.
> http://pivot.apache.org/tutorials/stock-tracker.ui.html
>
> Chris
>
> On 2 February 2011 17:43, Aanjaneya Shukla <aa...@vmware.com>> wrote:
> Hi,
> I am having some issues using ‘getNamedComponent’ method.
>
> BXML file:
> <PushButton bxml:id="Button1" buttonData="%Button1”/>
>
> Java file:
> PushButton Button1 = (PushButton)window.getNamedComponent("Button1");
>
> I want to get Button object but I have getting null value returned.
>
>


Re: getting object fron its container

Posted by Greg Brown <gk...@verizon.net>.
Maybe you should use an interface that defines a getButton() method. That would be more type-safe.

On Feb 2, 2011, at 8:24 AM, Aanjaneya Shukla wrote:

> Okay, but if I have multiple Window object and I randomly load an object into my frame. In this case I have access to only the Container object and if I have to suppose disable a button in my window then I need the Button object. And in this case I don't have location of bxml file, hence I don't think BXMLSerializer can be used.
> 
> Thanks
> 
> ________________________________________
> From: Greg Brown [gk_brown@verizon.net]
> Sent: Wednesday, February 02, 2011 20:53
> To: user@pivot.apache.org
> Subject: Re: getting object fron its container
> 
> Actually, because the BXML ID value is mapped to Component#setName() via the IDProperty annotation, you could also get the button in the example below via getNamedComponent("Button1").
> 
> However, as Chris noted, getNamedComponent() is not recursive. If you want access to all values declared with IDs in your BXML file, you should use BXMLSerializer.getNamespace().get() or implement Bindable in your root element.
> 
> G
> 
> On Feb 2, 2011, at 5:06 AM, Chris Bartlett wrote:
> 
> The Container#getNamedComponent(String) method is defined here
> http://svn.apache.org/repos/asf/pivot/trunk/wtk/src/org/apache/pivot/wtk/Container.java
> 
> You can see that it only iterates over the direct child Components in the Container and then checks for a matching name property.
> It does *not* check to see if those Components are actually instances of Container, and then recursively iterate over them.
> 
> It appears that none of the standard Pivot Containers override this method at look into child Containers, so you would need to roll your own method if you need to do that.
> 
> 
> Bear in mind that theContainer#getNamedComponent(String) method attempts to match against Component#getName().
> BXMLSerializer sets the Component's name property to the same value as the bxml:id as a convenience, but these are 2 separate values.
> 
> The Component's name can be set explicity in BXML as follows.
> <PushButton bxml:id="Button1" name="Foo" buttonData="%Button1”/>
> or in java (including at runtime) with
> myComponent.setName("Foo");
> 
> If you wanted to find this PushButton by name you would have to supply a value of "Foo", and not "Button1"
> 
> 
> It will often be more convenient to use the @BXML annotation to pick up objects in your code.
> The section titled 'The Bindable Interface' in the following tutorial contains more info.
> http://pivot.apache.org/tutorials/stock-tracker.ui.html
> 
> Chris
> 
> On 2 February 2011 17:43, Aanjaneya Shukla <aa...@vmware.com>> wrote:
> Hi,
> I am having some issues using ‘getNamedComponent’ method.
> 
> BXML file:
> <PushButton bxml:id="Button1" buttonData="%Button1”/>
> 
> Java file:
> PushButton Button1 = (PushButton)window.getNamedComponent("Button1");
> 
> I want to get Button object but I have getting null value returned.
> 
> 


RE: getting object fron its container

Posted by Aanjaneya Shukla <aa...@vmware.com>.
Okay, but if I have multiple Window object and I randomly load an object into my frame. In this case I have access to only the Container object and if I have to suppose disable a button in my window then I need the Button object. And in this case I don't have location of bxml file, hence I don't think BXMLSerializer can be used.

Thanks

________________________________________
From: Greg Brown [gk_brown@verizon.net]
Sent: Wednesday, February 02, 2011 20:53
To: user@pivot.apache.org
Subject: Re: getting object fron its container

Actually, because the BXML ID value is mapped to Component#setName() via the IDProperty annotation, you could also get the button in the example below via getNamedComponent("Button1").

However, as Chris noted, getNamedComponent() is not recursive. If you want access to all values declared with IDs in your BXML file, you should use BXMLSerializer.getNamespace().get() or implement Bindable in your root element.

G

On Feb 2, 2011, at 5:06 AM, Chris Bartlett wrote:

The Container#getNamedComponent(String) method is defined here
http://svn.apache.org/repos/asf/pivot/trunk/wtk/src/org/apache/pivot/wtk/Container.java

You can see that it only iterates over the direct child Components in the Container and then checks for a matching name property.
It does *not* check to see if those Components are actually instances of Container, and then recursively iterate over them.

It appears that none of the standard Pivot Containers override this method at look into child Containers, so you would need to roll your own method if you need to do that.


Bear in mind that theContainer#getNamedComponent(String) method attempts to match against Component#getName().
BXMLSerializer sets the Component's name property to the same value as the bxml:id as a convenience, but these are 2 separate values.

The Component's name can be set explicity in BXML as follows.
<PushButton bxml:id="Button1" name="Foo" buttonData="%Button1”/>
or in java (including at runtime) with
myComponent.setName("Foo");

If you wanted to find this PushButton by name you would have to supply a value of "Foo", and not "Button1"


It will often be more convenient to use the @BXML annotation to pick up objects in your code.
The section titled 'The Bindable Interface' in the following tutorial contains more info.
http://pivot.apache.org/tutorials/stock-tracker.ui.html

Chris

On 2 February 2011 17:43, Aanjaneya Shukla <aa...@vmware.com>> wrote:
Hi,
I am having some issues using ‘getNamedComponent’ method.

BXML file:
<PushButton bxml:id="Button1" buttonData="%Button1”/>

Java file:
PushButton Button1 = (PushButton)window.getNamedComponent("Button1");

I want to get Button object but I have getting null value returned.



Re: getting object fron its container

Posted by Greg Brown <gk...@verizon.net>.
Actually, because the BXML ID value is mapped to Component#setName() via the IDProperty annotation, you could also get the button in the example below via getNamedComponent("Button1"). 

However, as Chris noted, getNamedComponent() is not recursive. If you want access to all values declared with IDs in your BXML file, you should use BXMLSerializer.getNamespace().get() or implement Bindable in your root element.

G

On Feb 2, 2011, at 5:06 AM, Chris Bartlett wrote:

> The Container#getNamedComponent(String) method is defined here
> http://svn.apache.org/repos/asf/pivot/trunk/wtk/src/org/apache/pivot/wtk/Container.java
> 
> You can see that it only iterates over the direct child Components in the Container and then checks for a matching name property.
> It does *not* check to see if those Components are actually instances of Container, and then recursively iterate over them.
> 
> It appears that none of the standard Pivot Containers override this method at look into child Containers, so you would need to roll your own method if you need to do that.
> 
> 
> Bear in mind that theContainer#getNamedComponent(String) method attempts to match against Component#getName().  
> BXMLSerializer sets the Component's name property to the same value as the bxml:id as a convenience, but these are 2 separate values.
> 
> The Component's name can be set explicity in BXML as follows.
> <PushButton bxml:id="Button1" name="Foo" buttonData="%Button1”/>
> or in java (including at runtime) with
> myComponent.setName("Foo");
> 
> If you wanted to find this PushButton by name you would have to supply a value of "Foo", and not "Button1"
> 
> 
> It will often be more convenient to use the @BXML annotation to pick up objects in your code.
> The section titled 'The Bindable Interface' in the following tutorial contains more info.
> http://pivot.apache.org/tutorials/stock-tracker.ui.html
> 
> Chris
> 
> On 2 February 2011 17:43, Aanjaneya Shukla <aa...@vmware.com> wrote:
> Hi,
> 
> I am having some issues using ‘getNamedComponent’ method.
> 
>  
> BXML file:
> 
> <PushButton bxml:id="Button1" buttonData="%Button1”/>
> 
>  
> Java file:
> 
> PushButton Button1 = (PushButton)window.getNamedComponent("Button1");
> 
>  
> I want to get Button object but I have getting null value returned.
> 
>