2013-12-20 160 views
2

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

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

回答

3

渲染器有统一的尺寸我更详细地解释了一下为什么这是一个博客,我在本周早些时候写道情况:http://www.codenameone.com/3/post/2013/12/deeper-in-the-renderer.html

如果您需要更多的灵活性,我建议只是使用容器与箱子布局Y.

+0

对于我已经创建了一个带有BorderLayout的窗体的列表,并且该按钮被放置在南部。 (这使得按钮粘到底部)。为了克服上述问题,我在北部用容器(BoxLayoutY)替换了列表。但是现在当北部组件可滚动时,南部的按钮消失。 – sanket

+0

您的意思是渲染器不在列表中,对吗? 您不应将可滚动组件放置在渲染器中。 –

+0

好吧,我删除了List组件并使用了一个容器。无论如何,这现在已经解决了。我把容器放在中心而不是北面, – sanket