2

4 つのコンポジットを順番に並べています。

各コンポジットには、チェック ボックス、ラベル、および 2 つのボタンがあります。これで、これらの複合材が次々と整列されます。

これらのアイテムにフォーカスできるようにしたいです。つまり、tabあるコンポジットから別のコンポジットに移動するときに、現在のコンポジットが強調表示されている必要があります。理想的には、項目を選択すると強調表示されるリストのように動作するようにします。これは可能ですか?

コンポジットが他のウィジェット、コントロールのコンテナとして機能することを理解しています。私の要件は、5 つのエントリのリストがあり、リスト内の各項目にチェック ボックス、ラベル、および 2 つのボタンがあることです。また、それらが選択されたときに焦点を当てたいと思います。

また、上記で説明したのと同じ UI の代替ソリューションも教えてください。

4

1 に答える 1

1

タブをコンポジットからコンポジットに移動するには、各コンポジットのタブ リストを、タブの後にフォーカスする 1 つのコントロールに設定します。たとえば、チェック ボックスは次のとおりです。

composite.setTabList(new Control[]{checkButton});

ハイライトを作成するには、あなたの想像力が限界です。背景を変更したり、境界線を追加したり、名前を付けることができます。コンポジットのコントロールの 1 つがフォーカスされるたびに更新する必要があります。

完全な例を次に示します。

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

    createElement(shell);
    createElement(shell);
    createElement(shell);
    createElement(shell);

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

private static void createElement(final Composite parent) {
    final Composite composite = new Composite(parent, SWT.BORDER);
    composite.setLayout(new GridLayout(4, false));
    final Button checkButton = new Button(composite, SWT.CHECK);
    new Label(composite, SWT.NONE);
    final Button button1 = new Button(composite, SWT.PUSH);
    final Button button2 = new Button(composite, SWT.PUSH);
    Listener listener = new Listener() {
        @Override
        public void handleEvent(Event event) {
            for (Control control : parent.getChildren()) {
                control.setBackground(null);
            }
            composite.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_RED));
            if (event.widget == button1 || event.widget == button2) {
                checkButton.setFocus();
            }
        }
    };
    checkButton.addListener(SWT.FocusIn, listener);
    button1.addListener(SWT.FocusIn, listener);
    button2.addListener(SWT.FocusIn, listener);
    composite.setTabList(new Control[]{checkButton});
}
于 2013-10-18T15:57:51.903 に答える