You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@pivot.apache.org by anton dos santos <ad...@free.fr> on 2011/01/05 20:30:40 UTC

TableHeader

Hi
I  have a  TableViewHeader that displays a ListButton, but the ListButon is not usable.
I assume it is because the header is drawn by a "renderer" and not an "editor". Right?

Is it possible to have a working button or checkbox in a column's header ?

Regards
Anton

Re: TableHeader

Posted by Greg Brown <gk...@verizon.net>.
No, we dropped it since it's API was prone to memory leaks. It was also a fairly complicated class, and filtering is pretty easy to do at the app level.

On Jan 7, 2011, at 2:52 PM, anton dos santos wrote:

> It is fixed in 2.0 :)
> But I noticed that in 2.0, class org.apache.pivot.collections.FilteredList is missing. Will it be added again ?
> 
> Regards
> Anton
> 
> On 06/01/2011 19:21, Greg Brown wrote:
>> I believe that is a bug that was fixed for 2.0. Can you try running your app in 2.0 and see if the problem is resolved?
>> 
>> On Jan 6, 2011, at 12:10 PM, anton dos santos wrote:
>> 
>>> Hi Greg
>>> 
>>> I tried the easy way and added a MenuHandler to a custom header like this:
>>> 
>>> public class TableViewFilterHeader extends TableViewHeader {
>>> 
>>>      private MenuHandler menuHandler = new MenuHandler.Adapter() {
>>>        @Override
>>>        public boolean configureContextMenu(Component component, Menu menu, int x, int y) {
>>> 
>>>            Menu.Section menuSection = new Menu.Section();
>>>            menu.getSections().add(menuSection);
>>>            int index = TableViewFilterHeader.this.getHeaderAt(x);
>>>            String name = TableViewFilterHeader.this.getTableView().getColumns().get(index).getName();
>>>            Menu.Item whatIsThisMenuItem = new Menu.Item("filter for "+name);
>>>            whatIsThisMenuItem.setAction(new Action() {
>>>                @Override
>>>                public void perform( Component component) {
>>>                    System.out.println("FilterAction performed");
>>>                }
>>>            });
>>> 
>>>            menuSection.add(whatIsThisMenuItem);
>>> 
>>>            return false;
>>>        }
>>>    };
>>> 
>>>  public TableViewFilterHeader() {
>>>    setMenuHandler(menuHandler);
>>>   }
>>> 
>>> It works, when I right mouse click in the header, the menu is displayed and then when I click in the menu, menu becomes invisible and header is redisplayed.
>>> When I right mouse click in the header, the menu is displayed and then when I left click outside of the table header, menu becomes also invisible and header is redisplayed.
>>> But when right mouse click in the header, the menu is displayed and then when I left click inside of the table header, menu becomes also invisible but header is not correctly redisplayed (see attachment)
>>> I am doing this with 1.5.2 and the demo with the Olympic Medals
>>> 
>>> On 05/01/2011 21:34, Greg Brown wrote:
>>>> Yes, that is exactly what I was thinking. You can register a mouse button listener on the header and call getHeaderAt() to determine which header was pressed. Then you can call getHeaderBounds() to get that header's bounding area. Finally, you can call mapPointToAncestor() on the TableViewHeader to convert the header bounds to display coordinates for displaying the context menu (you can call getDisplay() on the header to get the display).
>>>> 
>>>> Let me know how it goes.
>>>> 
>>>> On Jan 5, 2011, at 3:26 PM, anton dos santos wrote:
>>>> 
>>>>> Yes you are right :)
>>>>> To do this I think I need a context menu as described here: http://pivot.apache.org/tutorials/context-menus.html
>>>>> 
>>>>> Regards
>>>>> Anton
>>>>> On 05/01/2011 21:06, Greg Brown wrote:
>>>>>> Well, a ListButton displays a popup, so I think we are probably describing the same thing.  :-)  I have written a similar UI where right-clicking on the table header makes a menu popup appear immediately below the header. The user can then select one of the values from the menu to filter the table contents.
>>>>>> G
>>>>>> 
>>>>>> On Jan 5, 2011, at 3:00 PM, anton dos santos wrote:
>>>>>> 
>>>>>>> not exactly
>>>>>>> I want to implement a filter feature: when in a column there are multiple distinct values then a ListButton with these distinct values is displayed in the header and when user select one of the values, only the corresponding rows will be displayed in the table.
>>>>>>> I am not sure a popup is user friendly in this case
>>>>>>> 
>>>>>>> Regards
>>>>>>> Anton
>>>>>>> 
>>>>>>> On 05/01/2011 20:34, Greg Brown wrote:
>>>>>>>> You are correct - renderers do not support user interaction because they aren't really there - they are just painted by the skin.
>>>>>>>> 
>>>>>>>> Are you trying to display a popup when the user clicks on the table header? If so, there are other ways to do this. I can try to put together a quick example if it would help.
>>>>>>>> 
>>>>>>>> G
>>>>>>>> 
>>>>>>>> On Jan 5, 2011, at 2:30 PM, anton dos santos wrote:
>>>>>>>> 
>>>>>>>>> Hi
>>>>>>>>> I  have a  TableViewHeader that displays a ListButton, but the ListButon is not usable.
>>>>>>>>> I assume it is because the header is drawn by a "renderer" and not an "editor". Right?
>>>>>>>>> 
>>>>>>>>> Is it possible to have a working button or checkbox in a column's header ?
>>>>>>>>> 
>>>>>>>>> Regards
>>>>>>>>> Anton
>>>> 
>>> <header.png>
>> 
>> 
> 


Re: TableHeader

Posted by anton dos santos <ad...@free.fr>.
It is fixed in 2.0 :)
But I noticed that in 2.0, class org.apache.pivot.collections.FilteredList is missing. Will it be 
added again ?

Regards
Anton

On 06/01/2011 19:21, Greg Brown wrote:
> I believe that is a bug that was fixed for 2.0. Can you try running your app in 2.0 and see if the problem is resolved?
>
> On Jan 6, 2011, at 12:10 PM, anton dos santos wrote:
>
>> Hi Greg
>>
>> I tried the easy way and added a MenuHandler to a custom header like this:
>>
>> public class TableViewFilterHeader extends TableViewHeader {
>>
>>       private MenuHandler menuHandler = new MenuHandler.Adapter() {
>>         @Override
>>         public boolean configureContextMenu(Component component, Menu menu, int x, int y) {
>>
>>             Menu.Section menuSection = new Menu.Section();
>>             menu.getSections().add(menuSection);
>>             int index = TableViewFilterHeader.this.getHeaderAt(x);
>>             String name = TableViewFilterHeader.this.getTableView().getColumns().get(index).getName();
>>             Menu.Item whatIsThisMenuItem = new Menu.Item("filter for "+name);
>>             whatIsThisMenuItem.setAction(new Action() {
>>                 @Override
>>                 public void perform( Component component) {
>>                     System.out.println("FilterAction performed");
>>                 }
>>             });
>>
>>             menuSection.add(whatIsThisMenuItem);
>>
>>             return false;
>>         }
>>     };
>>
>>   public TableViewFilterHeader() {
>>     setMenuHandler(menuHandler);
>>    }
>>
>> It works, when I right mouse click in the header, the menu is displayed and then when I click in the menu, menu becomes invisible and header is redisplayed.
>> When I right mouse click in the header, the menu is displayed and then when I left click outside of the table header, menu becomes also invisible and header is redisplayed.
>> But when right mouse click in the header, the menu is displayed and then when I left click inside of the table header, menu becomes also invisible but header is not correctly redisplayed (see attachment)
>> I am doing this with 1.5.2 and the demo with the Olympic Medals
>>
>> On 05/01/2011 21:34, Greg Brown wrote:
>>> Yes, that is exactly what I was thinking. You can register a mouse button listener on the header and call getHeaderAt() to determine which header was pressed. Then you can call getHeaderBounds() to get that header's bounding area. Finally, you can call mapPointToAncestor() on the TableViewHeader to convert the header bounds to display coordinates for displaying the context menu (you can call getDisplay() on the header to get the display).
>>>
>>> Let me know how it goes.
>>>
>>> On Jan 5, 2011, at 3:26 PM, anton dos santos wrote:
>>>
>>>> Yes you are right :)
>>>> To do this I think I need a context menu as described here: http://pivot.apache.org/tutorials/context-menus.html
>>>>
>>>> Regards
>>>> Anton
>>>> On 05/01/2011 21:06, Greg Brown wrote:
>>>>> Well, a ListButton displays a popup, so I think we are probably describing the same thing.  :-)  I have written a similar UI where right-clicking on the table header makes a menu popup appear immediately below the header. The user can then select one of the values from the menu to filter the table contents.
>>>>> G
>>>>>
>>>>> On Jan 5, 2011, at 3:00 PM, anton dos santos wrote:
>>>>>
>>>>>> not exactly
>>>>>> I want to implement a filter feature: when in a column there are multiple distinct values then a ListButton with these distinct values is displayed in the header and when user select one of the values, only the corresponding rows will be displayed in the table.
>>>>>> I am not sure a popup is user friendly in this case
>>>>>>
>>>>>> Regards
>>>>>> Anton
>>>>>>
>>>>>> On 05/01/2011 20:34, Greg Brown wrote:
>>>>>>> You are correct - renderers do not support user interaction because they aren't really there - they are just painted by the skin.
>>>>>>>
>>>>>>> Are you trying to display a popup when the user clicks on the table header? If so, there are other ways to do this. I can try to put together a quick example if it would help.
>>>>>>>
>>>>>>> G
>>>>>>>
>>>>>>> On Jan 5, 2011, at 2:30 PM, anton dos santos wrote:
>>>>>>>
>>>>>>>> Hi
>>>>>>>> I  have a  TableViewHeader that displays a ListButton, but the ListButon is not usable.
>>>>>>>> I assume it is because the header is drawn by a "renderer" and not an "editor". Right?
>>>>>>>>
>>>>>>>> Is it possible to have a working button or checkbox in a column's header ?
>>>>>>>>
>>>>>>>> Regards
>>>>>>>> Anton
>>>
>> <header.png>
>
>


Re: TableHeader

Posted by Greg Brown <gk...@verizon.net>.
I believe that is a bug that was fixed for 2.0. Can you try running your app in 2.0 and see if the problem is resolved?

On Jan 6, 2011, at 12:10 PM, anton dos santos wrote:

> Hi Greg
> 
> I tried the easy way and added a MenuHandler to a custom header like this:
> 
> public class TableViewFilterHeader extends TableViewHeader {
> 
>      private MenuHandler menuHandler = new MenuHandler.Adapter() {
>        @Override
>        public boolean configureContextMenu(Component component, Menu menu, int x, int y) {
> 
>            Menu.Section menuSection = new Menu.Section();
>            menu.getSections().add(menuSection);
>            int index = TableViewFilterHeader.this.getHeaderAt(x);
>            String name = TableViewFilterHeader.this.getTableView().getColumns().get(index).getName();
>            Menu.Item whatIsThisMenuItem = new Menu.Item("filter for "+name);
>            whatIsThisMenuItem.setAction(new Action() {
>                @Override
>                public void perform( Component component) {
>                    System.out.println("FilterAction performed");
>                }
>            });
> 
>            menuSection.add(whatIsThisMenuItem);
> 
>            return false;
>        }
>    };
> 
>  public TableViewFilterHeader() {
>    setMenuHandler(menuHandler);
>   }
> 
> It works, when I right mouse click in the header, the menu is displayed and then when I click in the menu, menu becomes invisible and header is redisplayed.
> When I right mouse click in the header, the menu is displayed and then when I left click outside of the table header, menu becomes also invisible and header is redisplayed.
> But when right mouse click in the header, the menu is displayed and then when I left click inside of the table header, menu becomes also invisible but header is not correctly redisplayed (see attachment)
> I am doing this with 1.5.2 and the demo with the Olympic Medals
> 
> On 05/01/2011 21:34, Greg Brown wrote:
>> Yes, that is exactly what I was thinking. You can register a mouse button listener on the header and call getHeaderAt() to determine which header was pressed. Then you can call getHeaderBounds() to get that header's bounding area. Finally, you can call mapPointToAncestor() on the TableViewHeader to convert the header bounds to display coordinates for displaying the context menu (you can call getDisplay() on the header to get the display).
>> 
>> Let me know how it goes.
>> 
>> On Jan 5, 2011, at 3:26 PM, anton dos santos wrote:
>> 
>>> Yes you are right :)
>>> To do this I think I need a context menu as described here: http://pivot.apache.org/tutorials/context-menus.html
>>> 
>>> Regards
>>> Anton
>>> On 05/01/2011 21:06, Greg Brown wrote:
>>>> Well, a ListButton displays a popup, so I think we are probably describing the same thing.  :-)  I have written a similar UI where right-clicking on the table header makes a menu popup appear immediately below the header. The user can then select one of the values from the menu to filter the table contents.
>>>> G
>>>> 
>>>> On Jan 5, 2011, at 3:00 PM, anton dos santos wrote:
>>>> 
>>>>> not exactly
>>>>> I want to implement a filter feature: when in a column there are multiple distinct values then a ListButton with these distinct values is displayed in the header and when user select one of the values, only the corresponding rows will be displayed in the table.
>>>>> I am not sure a popup is user friendly in this case
>>>>> 
>>>>> Regards
>>>>> Anton
>>>>> 
>>>>> On 05/01/2011 20:34, Greg Brown wrote:
>>>>>> You are correct - renderers do not support user interaction because they aren't really there - they are just painted by the skin.
>>>>>> 
>>>>>> Are you trying to display a popup when the user clicks on the table header? If so, there are other ways to do this. I can try to put together a quick example if it would help.
>>>>>> 
>>>>>> G
>>>>>> 
>>>>>> On Jan 5, 2011, at 2:30 PM, anton dos santos wrote:
>>>>>> 
>>>>>>> Hi
>>>>>>> I  have a  TableViewHeader that displays a ListButton, but the ListButon is not usable.
>>>>>>> I assume it is because the header is drawn by a "renderer" and not an "editor". Right?
>>>>>>> 
>>>>>>> Is it possible to have a working button or checkbox in a column's header ?
>>>>>>> 
>>>>>>> Regards
>>>>>>> Anton
>>>> 
>> 
>> 
> 
> <header.png>


Re: TableHeader

Posted by anton dos santos <ad...@free.fr>.
Hi Greg

I tried the easy way and added a MenuHandler to a custom header like this:

public class TableViewFilterHeader extends TableViewHeader {

       private MenuHandler menuHandler = new MenuHandler.Adapter() {
         @Override
         public boolean configureContextMenu(Component component, Menu menu, int x, int y) {

             Menu.Section menuSection = new Menu.Section();
             menu.getSections().add(menuSection);
             int index = TableViewFilterHeader.this.getHeaderAt(x);
             String name = TableViewFilterHeader.this.getTableView().getColumns().get(index).getName();
             Menu.Item whatIsThisMenuItem = new Menu.Item("filter for "+name);
             whatIsThisMenuItem.setAction(new Action() {
                 @Override
                 public void perform( Component component) {
                     System.out.println("FilterAction performed");
                 }
             });

             menuSection.add(whatIsThisMenuItem);

             return false;
         }
     };

   public TableViewFilterHeader() {
     setMenuHandler(menuHandler);
    }

It works, when I right mouse click in the header, the menu is displayed and then when I click in the 
menu, menu becomes invisible and header is redisplayed.
When I right mouse click in the header, the menu is displayed and then when I left click outside of 
the table header, menu becomes also invisible and header is redisplayed.
But when right mouse click in the header, the menu is displayed and then when I left click inside of 
the table header, menu becomes also invisible but header is not correctly redisplayed (see attachment)
I am doing this with 1.5.2 and the demo with the Olympic Medals

On 05/01/2011 21:34, Greg Brown wrote:
> Yes, that is exactly what I was thinking. You can register a mouse button listener on the header and call getHeaderAt() to determine which header was pressed. Then you can call getHeaderBounds() to get that header's bounding area. Finally, you can call mapPointToAncestor() on the TableViewHeader to convert the header bounds to display coordinates for displaying the context menu (you can call getDisplay() on the header to get the display).
>
> Let me know how it goes.
>
> On Jan 5, 2011, at 3:26 PM, anton dos santos wrote:
>
>> Yes you are right :)
>> To do this I think I need a context menu as described here: http://pivot.apache.org/tutorials/context-menus.html
>>
>> Regards
>> Anton
>> On 05/01/2011 21:06, Greg Brown wrote:
>>> Well, a ListButton displays a popup, so I think we are probably describing the same thing.  :-)  I have written a similar UI where right-clicking on the table header makes a menu popup appear immediately below the header. The user can then select one of the values from the menu to filter the table contents.
>>> G
>>>
>>> On Jan 5, 2011, at 3:00 PM, anton dos santos wrote:
>>>
>>>> not exactly
>>>> I want to implement a filter feature: when in a column there are multiple distinct values then a ListButton with these distinct values is displayed in the header and when user select one of the values, only the corresponding rows will be displayed in the table.
>>>> I am not sure a popup is user friendly in this case
>>>>
>>>> Regards
>>>> Anton
>>>>
>>>> On 05/01/2011 20:34, Greg Brown wrote:
>>>>> You are correct - renderers do not support user interaction because they aren't really there - they are just painted by the skin.
>>>>>
>>>>> Are you trying to display a popup when the user clicks on the table header? If so, there are other ways to do this. I can try to put together a quick example if it would help.
>>>>>
>>>>> G
>>>>>
>>>>> On Jan 5, 2011, at 2:30 PM, anton dos santos wrote:
>>>>>
>>>>>> Hi
>>>>>> I  have a  TableViewHeader that displays a ListButton, but the ListButon is not usable.
>>>>>> I assume it is because the header is drawn by a "renderer" and not an "editor". Right?
>>>>>>
>>>>>> Is it possible to have a working button or checkbox in a column's header ?
>>>>>>
>>>>>> Regards
>>>>>> Anton
>>>
>
>


Re: TableHeader

Posted by Greg Brown <gk...@verizon.net>.
Yes, that is exactly what I was thinking. You can register a mouse button listener on the header and call getHeaderAt() to determine which header was pressed. Then you can call getHeaderBounds() to get that header's bounding area. Finally, you can call mapPointToAncestor() on the TableViewHeader to convert the header bounds to display coordinates for displaying the context menu (you can call getDisplay() on the header to get the display).

Let me know how it goes.
 
On Jan 5, 2011, at 3:26 PM, anton dos santos wrote:

> Yes you are right :)
> To do this I think I need a context menu as described here: http://pivot.apache.org/tutorials/context-menus.html
> 
> Regards
> Anton
> On 05/01/2011 21:06, Greg Brown wrote:
>> Well, a ListButton displays a popup, so I think we are probably describing the same thing.  :-)  I have written a similar UI where right-clicking on the table header makes a menu popup appear immediately below the header. The user can then select one of the values from the menu to filter the table contents.
>> G
>> 
>> On Jan 5, 2011, at 3:00 PM, anton dos santos wrote:
>> 
>>> not exactly
>>> I want to implement a filter feature: when in a column there are multiple distinct values then a ListButton with these distinct values is displayed in the header and when user select one of the values, only the corresponding rows will be displayed in the table.
>>> I am not sure a popup is user friendly in this case
>>> 
>>> Regards
>>> Anton
>>> 
>>> On 05/01/2011 20:34, Greg Brown wrote:
>>>> You are correct - renderers do not support user interaction because they aren't really there - they are just painted by the skin.
>>>> 
>>>> Are you trying to display a popup when the user clicks on the table header? If so, there are other ways to do this. I can try to put together a quick example if it would help.
>>>> 
>>>> G
>>>> 
>>>> On Jan 5, 2011, at 2:30 PM, anton dos santos wrote:
>>>> 
>>>>> Hi
>>>>> I  have a  TableViewHeader that displays a ListButton, but the ListButon is not usable.
>>>>> I assume it is because the header is drawn by a "renderer" and not an "editor". Right?
>>>>> 
>>>>> Is it possible to have a working button or checkbox in a column's header ?
>>>>> 
>>>>> Regards
>>>>> Anton
>>>> 
>> 
>> 
> 


Re: TableHeader

Posted by anton dos santos <ad...@free.fr>.
Yes you are right :)
To do this I think I need a context menu as described here: 
http://pivot.apache.org/tutorials/context-menus.html

Regards
Anton
On 05/01/2011 21:06, Greg Brown wrote:
> Well, a ListButton displays a popup, so I think we are probably describing the same thing.  :-)  I have written a similar UI where right-clicking on the table header makes a menu popup appear immediately below the header. The user can then select one of the values from the menu to filter the table contents.
> G
>
> On Jan 5, 2011, at 3:00 PM, anton dos santos wrote:
>
>> not exactly
>> I want to implement a filter feature: when in a column there are multiple distinct values then a ListButton with these distinct values is displayed in the header and when user select one of the values, only the corresponding rows will be displayed in the table.
>> I am not sure a popup is user friendly in this case
>>
>> Regards
>> Anton
>>
>> On 05/01/2011 20:34, Greg Brown wrote:
>>> You are correct - renderers do not support user interaction because they aren't really there - they are just painted by the skin.
>>>
>>> Are you trying to display a popup when the user clicks on the table header? If so, there are other ways to do this. I can try to put together a quick example if it would help.
>>>
>>> G
>>>
>>> On Jan 5, 2011, at 2:30 PM, anton dos santos wrote:
>>>
>>>> Hi
>>>> I  have a  TableViewHeader that displays a ListButton, but the ListButon is not usable.
>>>> I assume it is because the header is drawn by a "renderer" and not an "editor". Right?
>>>>
>>>> Is it possible to have a working button or checkbox in a column's header ?
>>>>
>>>> Regards
>>>> Anton
>>>
>
>


Re: TableHeader

Posted by Greg Brown <gk...@verizon.net>.
Well, a ListButton displays a popup, so I think we are probably describing the same thing.  :-)  I have written a similar UI where right-clicking on the table header makes a menu popup appear immediately below the header. The user can then select one of the values from the menu to filter the table contents.
G

On Jan 5, 2011, at 3:00 PM, anton dos santos wrote:

> not exactly
> I want to implement a filter feature: when in a column there are multiple distinct values then a ListButton with these distinct values is displayed in the header and when user select one of the values, only the corresponding rows will be displayed in the table.
> I am not sure a popup is user friendly in this case
> 
> Regards
> Anton
> 
> On 05/01/2011 20:34, Greg Brown wrote:
>> You are correct - renderers do not support user interaction because they aren't really there - they are just painted by the skin.
>> 
>> Are you trying to display a popup when the user clicks on the table header? If so, there are other ways to do this. I can try to put together a quick example if it would help.
>> 
>> G
>> 
>> On Jan 5, 2011, at 2:30 PM, anton dos santos wrote:
>> 
>>> Hi
>>> I  have a  TableViewHeader that displays a ListButton, but the ListButon is not usable.
>>> I assume it is because the header is drawn by a "renderer" and not an "editor". Right?
>>> 
>>> Is it possible to have a working button or checkbox in a column's header ?
>>> 
>>> Regards
>>> Anton
>> 
>> 
> 


Re: TableHeader

Posted by anton dos santos <ad...@free.fr>.
not exactly
I want to implement a filter feature: when in a column there are multiple distinct values then a 
ListButton with these distinct values is displayed in the header and when user select one of the 
values, only the corresponding rows will be displayed in the table.
I am not sure a popup is user friendly in this case

Regards
Anton

On 05/01/2011 20:34, Greg Brown wrote:
> You are correct - renderers do not support user interaction because they aren't really there - they are just painted by the skin.
>
> Are you trying to display a popup when the user clicks on the table header? If so, there are other ways to do this. I can try to put together a quick example if it would help.
>
> G
>
> On Jan 5, 2011, at 2:30 PM, anton dos santos wrote:
>
>> Hi
>> I  have a  TableViewHeader that displays a ListButton, but the ListButon is not usable.
>> I assume it is because the header is drawn by a "renderer" and not an "editor". Right?
>>
>> Is it possible to have a working button or checkbox in a column's header ?
>>
>> Regards
>> Anton
>
>


Re: TableHeader

Posted by Greg Brown <gk...@verizon.net>.
You are correct - renderers do not support user interaction because they aren't really there - they are just painted by the skin.

Are you trying to display a popup when the user clicks on the table header? If so, there are other ways to do this. I can try to put together a quick example if it would help.

G

On Jan 5, 2011, at 2:30 PM, anton dos santos wrote:

> Hi
> I  have a  TableViewHeader that displays a ListButton, but the ListButon is not usable.
> I assume it is because the header is drawn by a "renderer" and not an "editor". Right?
> 
> Is it possible to have a working button or checkbox in a column's header ?
> 
> Regards
> Anton