1

HorizontalFieldManager2 つあることに焦点を当てることができませんLabelFieldsHorizontalFieldManager焦点が合ったときを強調したいと思います。次のコードを使用していますが、機能していません。

HorizontalFieldManager hrzMgrTimeLabel = new HorizontalFieldManager(
        Manager.USE_ALL_HEIGHT|Manager.FOCUSABLE) {

    protected void onFocus(int direction) {
        focussed = true;
        invalidate();
        super.onFocus(direction);
    }

    protected void onUnfocus() {
        focussed = false;
        invalidate();
        super.onUnfocus();
    }

    protected void paint(Graphics g) {
        g.setBackgroundColor(0x646060);
        if (focussed) {
            g.setColor(Color.BLUE);
        }
        g.clear();
        super.paint(g);
    }
};

hrzMgrTimeLabel.add(a);
hrzMgrTimeLabel.add(b);

horizontalFieldManager_left15.add(hrzMgrTimeLabel);

これが LabelField の実装です。

final LabelField a= new LabelField("") {
    protected void paint(Graphics graphics) {
        graphics.setColor(Color.WHITE);
        graphics.setBackgroundColor(0x646060);
        graphics.clear();
        super.paint(graphics);
    }
};

final LabelField b= new LabelField("") {
    protected void paint(Graphics graphics) {
        graphics.setColor(Color.WHITE);
        graphics.setBackgroundColor(0x646060);
        graphics.clear();
        super.paint(graphics);
    }
};
4

3 に答える 3

1

関数はgetFocusRect()答えを与えるかもしれません。これにより、Manager でフォーカスが適用される範囲が示され、Graphics.paint()メソッドまたはBorderクラスを使用できるようになります。

于 2012-06-11T11:57:40.027 に答える
0

に少なくとも 1 つのフォーカス可能なフィールドが必要ですHorizontalFieldManager。次の行はそれを行います。

hrzMgrTimeLabel.add(new NullField(NullField.FOCUSABLE));

次のコードを確認してください。

HorizontalFieldManager hrzMgrTimeLabel = new HorizontalFieldManager(Manager.USE_ALL_HEIGHT | Manager.FOCUSABLE) {
    protected void paint(Graphics g) {
        g.setBackgroundColor(isFocus() ? Color.BLUE : 0x646060);
        g.clear();
        super.paint(g);
    }

    protected void onFocus(int direction) {
        invalidate();
        super.onFocus(direction);
    }

    protected void onUnfocus() {
        invalidate();
        super.onUnfocus();
    }

    protected boolean navigationMovement(int dx, int dy, int status, int time) {
        invalidate();
        return super.navigationMovement(dx, dy, status, time);
    }

    protected boolean navigationClick(int status, int time) {
        invalidate();
        return super.navigationClick(status, time);
    }

    protected boolean navigationUnclick(int status, int time) {
        invalidate();
        return super.navigationUnclick(status, time);
    }
};

final LabelField a = new LabelField("First Label Field") {
    protected void paint(Graphics graphics) {
        graphics.setColor(Color.WHITE);
        super.paint(graphics);
    }
};

final LabelField b = new LabelField("Second Label Field") {
    protected void paint(Graphics graphics) {
        graphics.setColor(Color.WHITE);
        super.paint(graphics);
    }
};

hrzMgrTimeLabel.add(new NullField(NullField.FOCUSABLE));
hrzMgrTimeLabel.add(a);
hrzMgrTimeLabel.add(b);

ノート

onFocus(...), onUnfocus(), navigationMovement(...), navigationClick(...), navigationUnclick(...)- これらのメソッドは、図面を更新するためにオーバーライドされました。

于 2012-06-11T11:56:44.780 に答える
0

ラベル フィールドにフォーカスを当てたい場合は、 を使用しますfinal LabelField a= new LabelField("".FOCUSABLE)

于 2012-06-11T11:37:12.327 に答える