1

RCP で奇妙な問題が発生しています。私は開発に Linux を使用していないので、一般的なバグに関する知識はほとんどありません。RCP を試すために Ubuntu 11.10 を使用しています。

FocusAdapter私の RCP には、フォーカス ( ) 用と用の 2 つのリスナーが接続された SWT テキストがありSWT.DefaultSelectionます。ではFocusAdapter、メソッドを実装しfocusLostます。

ユーザーがテキストを編集して return キーを押すと、SWT.DefaultSelectionリスナーhandleEventが呼び出され、新しいテキストを確認してフィールドを更新するメッセージが表示されますText。ユーザーがテキストを編集したが、リターン キーTextを押さずにフィールドの外側をクリックしただけの場合、focusLostイベントが呼び出され、テキストが元のテキストに戻されます ( text.setText(originalText);)。

これは、Eclipse から起動すると正常に動作するように見えますが、Maven + Tycho を介して製品をエクスポートすると、動作が停止するようです。ユーザーがテキストを編集すると、ユーザーがリターン キーを押すかどうかに関係なく、元のテキストに戻るか、Textフィールドの外側をクリックするだけです。編集内容を確認するメッセージダイアログも表示されません。

私が集めたものからは、focusLost イベントを使用しているようで、return キーは効果がありません。これが明らかな場合は申し訳ありませんが、主な開発に使用している Windows マシンでこれに遭遇したことはありません。

4

1 に答える 1

10

SWT.Traverse代わりにリッスンしてevent.detailequalsかどうかを確認できSWT.TRAVERSE_RETURNます。Linuxでテストしましたが、動作します:

public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    final Text text = new Text(shell, SWT.BORDER);
    text.addListener(SWT.Traverse, new Listener()
    {
        @Override
        public void handleEvent(Event event)
        {
            if(event.detail == SWT.TRAVERSE_RETURN)
            {
                System.out.println("Enter pressed");
            }
        }
    });

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
        {
            display.sleep();
        }
    }
    display.dispose();
}

ここに関連する質問があります:

SWT クロスプラットフォーム侵入検出

于 2013-05-29T20:57:36.103 に答える