2013-12-20 158 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