0

lwuit 1.5 を使用してラベルにティッカーを設定しようとしましたが、この問題に直面しました: label.setRTL(true) を設定してから呼び出す場合

label.startTicker(UIManager.getInstance().getLookAndFeel().getTickerSpeed(), true);

ティッカーは、ラベルのテキストの最初の 21 文字だけを表示し、残りは無視します。

私はもう試した:

label.setRTL(false);
label.startTicker(UIManager.getInstance().getLookAndFeel().getTickerSpeed(), true);

問題なく表示され、テキストは左から右に移動しますが、これを FocusListener に設定すると (ラベルがフォーカスを受け取るとティッカーが開始し、フォーカスを失った後に停止する必要があるため)、方向が変わるだけです (右から左に移動します)。

これが私がすることです:

Label test = new Label();
Container c1 = new Container(new FlowLayout());


test.setText("1234567890ABCDEFGHIJ1234567890");
test.setFocusable(true);
test.setRTL(false);
test.addFocusListener(new FocusListener (){

        public void focusGained(Component cmpnt) {
            ((Label)cmpnt).setRTL(false);
            ((Label)cmpnt).startTicker(UIManager.getInstance().getLookAndFeel().getTickerSpeed(), false);
        }

        public void focusLost(Component cmpnt) {
            ((Label)cmpnt).stopTicker();
        }
});
c1.addComponent(test);
4

2 に答える 2

1

setLabelFor を見てください。test がフォーカスを得ると、test のラベルが表示されます。おそらく、ルック アンド フィール クラスで RTL をグローバルに設定する必要があります。

于 2012-04-08T12:07:23.757 に答える
0

問題を見つけました。ラベルをコンテナ(c1)に追加する前にfocusListenerを実装したため、間違った方向が発生します。だから私はこれをしました:

c1.addComponent(test);
test.addFocusListener(new FocusListener (){

    public void focusGained(Component cmpnt) {
        ((Label)cmpnt).setRTL(false);
        ((Label)cmpnt).startTicker(UIManager.getInstance().getLookAndFeel().getTickerSpeed(), false);
    }

    public void focusLost(Component cmpnt) {
        ((Label)cmpnt).stopTicker();
    }
});

そしてそれは単に機能しました。実際、私はLabelクラスのソースコード(149行目から153行目)からアイデアを得ました。

// solves the case of a user starting a ticker before adding the component
    // into the container
    if(isTickerEnabled() && isTickerRunning() && !isCellRenderer()) {
        getComponentForm().registerAnimatedInternal(this);
    }

この部分は機能しませんが、理由はわかりません。誰かがこのバグを修正することを願っています。

于 2012-04-07T05:55:18.860 に答える