Menu Buttons

Menu buttons are similar to list buttons, but provide access to "drop-down" menus rather than list views. They are often used in toolbars, but can be placed anywhere within an application's user interface.

The following sample application demonstrates the use of a menu button. Selecting an option from the menu button on the left adds the corresponding component type to the content area on the right:

The BXML source for the application is as follows:

            
            <menus:MenuButtons title="Menu Buttons" maximized="true"
                xmlns:bxml="http://pivot.apache.org/bxml"
                xmlns:content="org.apache.pivot.wtk.content"
                xmlns:menus="org.apache.pivot.tutorials.menus"
                xmlns="org.apache.pivot.wtk">
                <Border styles="{padding:8}">
                    <TablePane styles="{horizontalSpacing:4}">
                        <columns>
                            <TablePane.Column width="-1"/>
                            <TablePane.Column width="1*"/>
                        </columns>

                        <TablePane.Row height="1*">
                            <BoxPane orientation="vertical">
                                <MenuButton buttonData="Add Component">
                                    <Menu>
                                        <Menu.Section>
                                            <Menu.Item buttonData="Push Button" action="addPushButton"/>
                                            <Menu.Item buttonData="Checkbox" action="addCheckbox"/>
                                            <Menu.Item buttonData="Radio Button" action="addRadioButton"/>
                                        </Menu.Section>
                                    </Menu>
                                </MenuButton>
                            </BoxPane>

                            <Border>
                                <ScrollPane>
                                    <BoxPane bxml:id="componentBoxPane" orientation="vertical"
                                        styles="{padding:4, spacing:4}"/>
                                </ScrollPane>
                            </Border>
                        </TablePane.Row>
                    </TablePane>
                </Border>
            </menus:MenuButtons>
            
        

Like the previous example, it defines a set of menu items that are associated with named actions. The Java source, which defines the actions, is shown below:

            
            package org.apache.pivot.tutorials.menus;

            import java.net.URL;

            import org.apache.pivot.beans.Bindable;
            import org.apache.pivot.collections.Map;
            import org.apache.pivot.util.Resources;
            import org.apache.pivot.wtk.Action;
            import org.apache.pivot.wtk.BoxPane;
            import org.apache.pivot.wtk.Checkbox;
            import org.apache.pivot.wtk.Component;
            import org.apache.pivot.wtk.PushButton;
            import org.apache.pivot.wtk.RadioButton;
            import org.apache.pivot.wtk.Window;

            public class MenuButtons extends Window implements Bindable {
                private BoxPane componentBoxPane = null;

                public MenuButtons() {
                    Action.getNamedActions().put("addPushButton", new Action() {
                        @Override
                        public void perform(Component source) {
                            componentBoxPane.add(new PushButton("Push button"));

                        }
                    });

                    Action.getNamedActions().put("addCheckbox", new Action() {
                        @Override
                        public void perform(Component source) {
                            componentBoxPane.add(new Checkbox("Checkbox"));
                        }
                    });

                    Action.getNamedActions().put("addRadioButton", new Action() {
                        @Override
                        public void perform(Component source) {
                            componentBoxPane.add(new RadioButton("Radio button"));
                        }
                    });
                }

                @Override
                public void initialize(Map<String, Object> namespace, URL location, Resources resources) {
                    componentBoxPane = (BoxPane)namespace.get("componentBoxPane");
                }
            }
            
        

Next: Color Choosers