2011-04-19 2 views
0

내가 여기에서 가져온 BSimpleTable를 사용하여 사용자 정의의 ListField 구성 요소 추가 : http://javaandjava.blogspot.com/2010/02/simple-table-component-for-blackberry.html 불행하게도 구성 요소가 그 안에 필드에 대한 올바른 정렬을 지원하지 않습니다, 그래서 수정하여 추가하려 이 같은 코드 :사용자의 ListField 그릴하지 않습니다 제대로

public class BSimpleRowRenderer extends Manager{ 
private int[] colWidthPercents; 
private int[] cellFrontPaddings; 
private int preferredHeight; 

public BSimpleRowRenderer(long style,Field[] rowContents,int preferredHeight, 
int[] colWidthPercents,int[] cellFrontPaddings){ 
    super(style); 
    for (int col = 0; col < rowContents.length; col++) { 
     add(rowContents[col]); 
    } 
    this.colWidthPercents = new int[rowContents.length]; 
    for(int i=0;i<colWidthPercents.length;i++){ 
     this.colWidthPercents[i] = colWidthPercents[i]; 
    } 
    this.cellFrontPaddings = new int[rowContents.length]; 
    for(int i=0;i<cellFrontPaddings.length;i++){ 
     this.cellFrontPaddings[i] = cellFrontPaddings[i]; 
    } 
    this.preferredHeight = preferredHeight; 
} 

protected void sublayout(int width, int height) { 
    int x=0; 
    int totalWidth = Display.getWidth(); 
    for (int col = 0; col < getFieldCount(); col++) { 
     // Set the size and position of the current cell. 
     Field curCellField = getField(col); 
     XYPoint offset = calcAlignmentOffset(curCellField, Math.max(0,colWidthPercents[col]*totalWidth/100), Math.max(0, getPreferredHeight())); 
     layoutChild(curCellField, width-x,getPreferredHeight()); 
     setPositionChild(curCellField, x+offset.x, 0); 
     x+=(int)Math.floor((colWidthPercents[col]*totalWidth)/100); 
    } 
    setExtent(Display.getWidth(), getPreferredHeight()); 
} 

public void drawRow(Graphics g, int x, int y, int width, int height) { 
    layout(width, height); 
    setPosition(x, y); 
    g.pushRegion(getExtent()); 
    subpaint(g); 
    g.popContext(); 
} 

public int getPreferredWidth() { 
    return Display.getWidth(); 
} 

public int getPreferredHeight() { 
    return preferredHeight; 
} 

private XYPoint calcAlignmentOffset(Field field, int width, int height) 
{ 
    XYPoint offset = new XYPoint(0, 0); 
    long fieldStyle = field.getStyle(); 
    long field_x_style = fieldStyle & Field.FIELD_HALIGN_MASK; 

    if (field_x_style == Field.FIELD_RIGHT){ 
     offset.x = width - field.getExtent().width; 
    } 
    else if (field_x_style == Field.FIELD_HCENTER){ 
     offset.x = (width - field.getExtent().width)/2; 
    } 

    long field_y_style = fieldStyle & Field.FIELD_VALIGN_MASK; 

    if (field_y_style == Field.FIELD_BOTTOM){ 
     offset.y = height - field.getExtent().height; 
    } 
    else if (field_y_style == Field.FIELD_VCENTER){ 
     offset.y = (height - field.getExtent().height)/2; 
    } 

    return offset; 
} 

}

문제는 올바른 정렬은 강조되고 강조 행 또는 행 내부의 필드에 노력하고있다. 위의 코드에서 내가 잘못했거나 누락 된 곳이 어디인지 궁금합니다. 나는 어떤 수정이든 내가 성취하고자하는 것을 반영하지 못해서 필사적이다.

답변

1

테이블이 필요한 경우 다음을 시도해 볼 수 있습니다. How To - Create a rich UI layout with TableLayoutManager. 그것은 나를 위해 완벽하게 일했습니다.

+0

답장을 보내 주셔서 감사합니다.하지만 구성 요소를 변경하는 것이 내가 원하는 마지막 작업이며 올바른 구성 지원이 부족하다는 점을 제외하고는 현재 구성 요소가 충분합니다. 어쨌든 고마워, . –