代号一个ListCellRenderer

时间:2013-12-20 13:13:54

标签: java codenameone

我正在尝试创建一个由三个文本区域组成的ListCellRenderer。在构造函数中,我创建一个空Container,设置其布局,为Text区域设置样式,并将文本区域添加到容器中。此容器ID进一步添加到渲染器组件。此外,我在getListCellRendererComponent()方法中为我的TextAreas设置值。 以下是我的代码:

 class PropertiesRenderer extends Container implements ListCellRenderer<PropertyAssessmentData> {

    private TextArea name = new TextArea("");
    private TextArea assessedValue = new TextArea("");
    private TextArea address = new TextArea("");
    private Label focus = new Label("");

    public PropertiesRenderer() {      
        setLayout(new BorderLayout());
        Container con = new Container(new BoxLayout(BoxLayout.Y_AXIS));
        con.getStyle().setBorder(Border.createBevelRaised());
        name.setEditable(false);
        name.getStyle().setBorder(null);
        con.addComponent(name);
        assessedValue.setEditable(false);
        assessedValue.getStyle().setBorder(null);
        con.addComponent(assessedValue);
        address.setEditable(false);
        address.getStyle().setBorder(null);
        con.addComponent(address);
        addComponent(BorderLayout.CENTER, con);
    }

    public Component getListCellRendererComponent(List list, PropertyAssessmentData value, int index, boolean isSelected) {
        name.setText("Name: " + value.getOwner_Name());
        assessedValue.setText("Total Value: " + value.getTotal_Value());
        address.setText("Address: " + value.getAddress());
        return this;
    }

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

}

现在的问题是它会正确显示所有内容,直到文本区域有一行。一旦文本区域有多行,它就会开始隐藏组件。我认为这与CN1计算组件的大小有关,而不知道它将包含的数据,因此它是默认的。这是真的 ?有解决方法吗?附件是屏幕截图

enter image description here

1 个答案:

答案 0 :(得分:3)

渲染器具有统一的大小我在本周早些时候写的博客中解释了为什么会出现这种情况:http://www.codenameone.com/3/post/2013/12/deeper-in-the-renderer.html

如果您需要更多灵活性,我建议您使用带有方框Y的容器。