I had a custom ListCellRendered which had

setUIID("Underline");
focus = new Label("");
focus.setUIID("UnderlineSelected");

and

   @Override
    public Component getListFocusComponent(List list) {
        return focus;
    }

so when the List item is selected the visual appearance of that item 
changes. I've now changed the code to use a list of Components, as advised, 
where each component is generated from:

    Container makeComponent(final Product product) {

        int h = Display.getInstance().convertToPixels(8, false);

        Container c = new Container();
        c.setUIID("Underline");
        c.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        c.setScrollableY(false);

        Label code = new Label();
        code.setUIID("BoldLabel");
        code.setText(product.getCode());

        Label price = new Label();
        price.setUIID("BoldLabel");
        price.setText("$" + product.getPrice() + "/" + product.getUnit());

        Label desc = new Label();
        desc.setUIID("MyLabel");
        desc.setText(product.getDescription());

        Container c1 = new Container();
        c1.setLayout(new BorderLayout());
        c1.addComponent(BorderLayout.WEST, code);
        c1.addComponent(BorderLayout.EAST, price);

        c.add(c1);
        c.add(desc);

        c.setPreferredH(c.getPreferredH() < h ? h : c.getPreferredH());

        return c;

    }

where these components are added to a form in a loop. The UIID "Underline" 
that the container has renders OK. I've changed the Selected and Pressed 
styles for the "Underline" selector to be the same as the 
"UnderlineSelected" UIID I was originally using in the List implimentation. 
My problem is when one of these containers is selected/pressed there is no 
change in the visual appearance.

If I make the components buttons, such as:

   Container makeComponent(final ProductCategory pc) {

        int h = Display.getInstance().convertToPixels(8, false);

        Container c = new Container();
        c.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        c.setScrollableY(false);

        Button b = new Button(pc.getDescription());
        b.setUIID("Underline");
        b.setPreferredH(b.getPreferredH() < h ? h : b.getPreferredH());
        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {

                CommonContext.INSTANCE.setProductCategory(pc);

                GroupForm f = new GroupForm().init();
                f.setBackForm(CategoryForm.this);
                f.show();
            }

        });

        c.add(b);
        return c;

    }

this works because the button changes state.

What is the best way to get a state change in a Container which does not 
have a button (or has other stuff in addition to a button).

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/169f05d7-bcec-43b4-a9d2-3e3d4d08cab4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to