1

私が作成した JFace ダイアログは、異なる解像度でのレイアウトの違いを示しています。Eclipse で使用されているダイアログのように、すべての解像度で同じレイアウトを表示する JFace または SWT でダイアログを作成する方法。

画面の解像度を 800x600 ピクセルに変更し、特大フォントを選択すると、ダイアログのレイアウトが乱れますが、これは Eclipse IDE ダイアログには当てはまりません。私のダイアログのスクリーンショットを確認してください。ここに画像の説明を入力

4

1 に答える 1

10

チャットでの議論によると、以前このコードに取り組んでいた人たちは、個々のウィジェットのサイズを制限していたようです。あなたの質問に似たダミーのダイアログを作成しました。ウィジェットのサイズを制限しません。代わりに、レイアウトがサイズ変更を処理します。

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class DummyDialog extends Dialog {

    private Composite composite;

    public DummyDialog(Shell parentShell)
    {
        super(parentShell);
        setShellStyle(parentShell.getStyle() | SWT.CLOSE | SWT.TITLE | SWT.BORDER | SWT.APPLICATION_MODAL);
        setBlockOnOpen(true);
    }

    protected Control createDialogArea(Composite parent) {
        this.composite = (Composite) super.createDialogArea(parent);

        GridLayout layout = new GridLayout(1, false);
        layout.marginHeight = 5;
        layout.marginWidth = 10;

        composite.setLayout(layout);

        createContent();

        return composite;
    }

    private void createContent()
    {
        createTopContent();

        createMiddleContent();

        createBottomContent();
    }

    private void createTopContent()
    {
        Composite top = new Composite(composite, SWT.NONE);

        top.setLayout(new GridLayout(2, false));
        top.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

        Label firstLabel = new Label(top, SWT.NONE);
        firstLabel.setText("X-Ref Library");
        Text firstText = new Text(top, SWT.BORDER);
        firstText.setText("MANISH2XA");
        firstText.setEditable(false);
        firstText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));

        Label secondLabel = new Label(top, SWT.NONE);
        secondLabel.setText("Text");
        Text secondText = new Text(top, SWT.BORDER);
        secondText.setText("Test Lib for Manish");
        secondText.setEditable(false);
        secondText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
    }

    private void createMiddleContent()
    {
        Composite middle = new Composite(composite, SWT.NONE);
        middle.setLayout(new GridLayout(3, false));
        middle.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        Group leftGroup = new Group(middle, SWT.NONE);
        leftGroup.setText("Object Library(s)");
        leftGroup.setLayout(new GridLayout(1, false));
        leftGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        List leftList = new List(leftGroup, SWT.BORDER);
        leftList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        leftList.add("DUMMY");

        Composite buttons = new Composite(middle, SWT.NONE);
        buttons.setLayout(new GridLayout(1, false));

        Button moveUp = new Button(buttons, SWT.PUSH);
        moveUp.setText("Move up");
        moveUp.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
        Button moveDown = new Button(buttons, SWT.PUSH);
        moveDown.setText("Move down");
        moveDown.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
        Button modify = new Button(buttons, SWT.PUSH);
        modify.setText("Modify");
        modify.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
        Button remove = new Button(buttons, SWT.PUSH);
        remove.setText("Remove");
        remove.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));

        Group rightGroup = new Group(middle, SWT.NONE);
        rightGroup.setText("Source Library(s)");
        rightGroup.setLayout(new GridLayout(1, false));
        rightGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        List rightList = new List(rightGroup, SWT.BORDER);
        rightList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        rightList.add("DUMMY");
    }

    private void createBottomContent()
    {
        Composite bottom = new Composite(composite, SWT.NONE);
        bottom.setLayout(new GridLayout(3, false));
        bottom.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

        Label leftLabel = new Label(bottom, SWT.NONE);
        leftLabel.setText("Library");

        Label rightLabel = new Label(bottom, SWT.NONE);
        rightLabel.setText("Type");

        new Label(bottom, SWT.NONE);

        Text leftText = new Text(bottom, SWT.BORDER);
        leftText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));

        Combo combo = new Combo(bottom, SWT.NONE);
        combo.add("Object Library");
        combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));

        Button add = new Button(bottom, SWT.PUSH);
        add.setText("Add");
        add.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
    }

    protected void configureShell(Shell newShell)
    {
        super.configureShell(newShell);
        newShell.setText("Application Library List");
    }

    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        super.createButtonsForButtonBar(parent);

        Button ok = getButton(IDialogConstants.OK_ID);
        ok.setText("Apply Changes");
        setButtonLayoutData(ok);

        Button cancel = getButton(IDialogConstants.CANCEL_ID);
        cancel.setText("Cancel");
        setButtonLayoutData(cancel);
    }

    public void okPressed()
    {
        this.close();
    }

    public static void main(String[] args)
    {
        new DummyDialog(new Shell()).open();
    }
}

これがどのように見えるかです:

ここに画像の説明を入力

于 2012-10-05T09:07:22.550 に答える