问题是为黑莓调整自定义编辑字段

时间:2010-11-08 12:27:21

标签: java user-interface blackberry layout

我使用JDE4.2.1编写了带边框的自定义编辑字段 然后将此字段添加到VerticalLayoutManager并实例化为:


  BorderEditField bef = new BorderEditField("Enter a value: ", null, 6,
                BorderEditField.FIELD_RIGHT | BorderEditField.FILTER_NUMERIC);

然而,无论我指定哪种样式(FIELD_HCENTER),Field始终保持对齐。 有什么明显的东西我可能会在这里失踪吗?在不同版本的JDE上尝试使用相同的结果......


public class BorderEditField extends BasicEditField {
    public BorderEditField(String label, String initialValue, int maxNumChars, long style)   
    {
        super(label, initialValue, maxNumChars, style);
    }

    private int iRectX = getFont().getAdvance(getLabel());
    private int iRectWidth = (getMaxSize() * getFont().getAdvance("X")) + 16;

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

    public void layout(int width, int height) {
        super.layout(width, getPreferredHeight());
        setExtent(width, getPreferredHeight());
    }

    public void paint(Graphics g) {
        super.paint(g);
        if (isFocus()) {
            g.setColor(Color.RED);
            g.setGlobalAlpha(220);
            g.drawRect(iRectX, 0, iRectWidth, getPreferredHeight());
        } else {
            g.setColor(Color.BLACK);
            g.setBackgroundColor(Color.DARKBLUE);
            g.setGlobalAlpha(150);
            g.drawRect(iRectX, 0, iRectWidth, getPreferredHeight());
        }
    }
}

感谢。

2 个答案:

答案 0 :(得分:2)

当你创建VerticalFieldManager时,你告诉它USE_ALL_WIDTH吗?如果你没有设置那个标志,那么它只会和最宽的组件一样宽,所以无论你为它的孩子设置什么样的样式,它们总是看起来一样。

== UPDATE ==

好的,另外要看的是你的布局和getPreferredWidth方法。在getPreferredWidth中,您将其设置为屏幕的宽度。这意味着它将占用管理器的整个宽度,因此无法定位它。尝试根据内容计算实际宽度。与布局方法相同,您使用完整的可用宽度调用setExtent。这告诉管理器组件应占用整个宽度。一旦正确计算出来,请尝试使用首选宽度。

作为快速测试,在开始尝试计算宽度之前,您可以在其中硬编码值。如果这有所不同,那么您可以开始计算如何正确计算宽度。

答案 1 :(得分:1)

Dave的答案很好,代码现在看起来像这样,字段正确对齐:

public BorderEditField(String label, String initialValue, int maxNumChars, long style) { super(label, initialValue, maxNumChars, style); }

private int iRectX = getFont().getAdvance(getLabel());

public int getPreferredWidth() {
    return super.getMaxSize() * super.getFont().getAdvance("X");
}

public int getPreferredHeight() {
    return super.getPreferredHeight();
}

public void layout(int width, int height) {
    width = Math.min( width, getPreferredWidth() );
    height = Math.min( height, getPreferredHeight() );
    super.layout(width, height);
    setExtent(width, height);

}

public void paint(Graphics g) {
    super.paint(g);
    if (isFocus()) {
        g.setColor(Color.RED);
        g.drawRect(iRectX, 0, getPreferredWidth() , getPreferredHeight());
    } else {
        g.setColor(Color.BLACK);
        g.drawRect(iRectX, 0, getPreferredWidth() , getPreferredHeight());
    }
}