如何使SWT / JFace对话框在所有窗口分辨率下显示相似的行为(布局) [英] How to make SWT/JFace dialogs which show similar behaviour(layouts) under all window resolutions

查看:182
本文介绍了如何使SWT / JFace对话框在所有窗口分辨率下显示相似的行为(布局)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建的JFace对话框显示不同分辨率下的布局差异。如何在JFace或SWT中创建对话框,在所有分辨率下显示相同的布局,就像Eclipse中使用的对话框一样。


$ b我的意思是,将屏幕分辨率更改为800x600像素,并选择超大字体,对话框的布局会受到干扰,Eclipse IDE对话框不是这样。请查看对话框的屏幕截图。

解决方案

p>好的,基于聊天中的讨论,好像以前在这个代码上工作的人限制了各个小部件的大小。我创建了一个类似于你的问题的虚拟对话框。它不会限制窗口小部件的大小。相反,布局会处理大小:

  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();

返回复合;
}

private void createContent()
{
createTopContent();

createMiddleContent();

createBottomContent();
}

private void createTopContent()
{
复合顶=新复合(复合,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()
{
复合中间=新复合(复合,SWT.NONE);
middle.setLayout(new GridLayout(3,false));
middle.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));

组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));

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

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

按钮moveUp = new Button(按钮,SWT.PUSH);
moveUp.setText(Move up);
moveUp.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
按钮moveDown = new Button(按钮,SWT.PUSH);
moveDown.setText(下移);
moveDown.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
按钮modify = new Button(按钮,SWT.PUSH);
modify.setText(Modify);
modify.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
按钮remove = new Button(按钮,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));

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

private void createBottomContent()
{
复合底=新复合(复合,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);

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

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

按钮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);

按钮ok = getButton(IDialogConstants.OK_ID);
ok.setText(应用更改);
setButtonLayoutData(ok);

按钮cancel = getButton(IDialogConstants.CANCEL_ID);
cancel.setText(取消);
setButtonLayoutData(cancel);
}

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

public static void main(String [] args)
{
new DummyDialog(new Shell())。
}
}

这是它的外观:




The JFace Dialogs I have created show difference in layouts under different resolutions.How to create dialog in JFace or SWT which show same layout under all resolutions just like the dialogs used in Eclipse.

i mean that on changing the screen resolution to 800x600 pixels and choosing extra large fonts the layout of the dialog gets disturbed which is not the case with Eclipse IDE dialogs.Just check out the screenshot of my dialog.

解决方案

Ok, based on the discussion in chat, it seems like the guys previously working on this code restricted the size of the individual widgets. I created a dummy dialog which resembles the one in your question. It does not restrict widget sizes. Instead the layouts take care of the sizing:

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();
    }
}

Here is how it looks:

这篇关于如何使SWT / JFace对话框在所有窗口分辨率下显示相似的行为(布局)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆