2012-11-28 41 views
0

任何人都可以帮助我如何改变这个对话框来调整不同窗口的分辨率。如何更改对话框来调整不同窗口的分辨率

protected Object openDialogBox(Control cellEditorWindow) 
    { 
     dialog = new DialogHead(); 

     dialog.setShell(550, 280); 
     dialog.setShellOnCenter(); 
     dialog.setShellText("Properties"); 
     dialog.setShellImage(BPMNUtils.getAbsolutePath()+ "icons/module.gif"); 


     composite = dialog.getComposite(0, 0, 550, 435); 
     GridLayout layout = new GridLayout(); 
     composite.setLayout(layout); 

     Group propertyGroup = dialog.getGroup(composite, "Properties", new Rectangle(5, 2, 530, 237)); 


     //getPackage(); 

     final Table table = dialog.getTable(propertyGroup, new Rectangle(10, 20, 422, 38)); 

     table.setLinesVisible(true); 
     table.setHeaderVisible(true); 
     GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 3); 
     gd_table.heightHint = 160; 
     table.setLayoutData(gd_table); 


     dialog.getTableColumn(table, 0, "Name", 100); 
     dialog.getTableColumn(table, 1, "Type", 125); 
     dialog.getTableColumn(table, 2, "Value", 100); 
     dialog.getTableColumn(table, 3, "Correlation", 100); 
     dialog.getTableColumn(table, 4, "Mode", 68); 

     createInitialContents(table); 
     dialog.measureItem(table); 

     final TableEditor editor = new TableEditor(table); 


     final Button addButton = dialog.getPushButton(propertyGroup,"Add", new Rectangle(150, 210, 60, 24)); 
     final Button deleteButton =dialog.getPushButton(propertyGroup,"Delete", new Rectangle(210, 210, 60, 24)); 
     final Button okButton = dialog.getPushButton(propertyGroup,"OK", new Rectangle(270, 210, 60, 24)); 
     final Button cancelButton =dialog.getPushButton(propertyGroup,"Cancel", new Rectangle(330, 210, 60, 24)); 
     } 
+0

有没有答案适合你?如果是这样,请接受其中一个,如果没有,请说明原因。 – Baz

回答

1

如果我理解正确的话,你需要的是知道当前的屏幕分辨率是什么,这样就可以按比例调整对话框(如33%的宽度和50%的高度,例如)的方式。

您可以使用Display#getBounds()抓取屏幕分辨率以达到:

Rectangle screenSize = Display.getCurrent().getBounds(); 
dialog.setShell(screenSize.width/3, screenSize.height/2); 
+0

如果用户有单个屏幕设置,这将工作。如果有多个屏幕,Display#getBounds()将返回所有屏幕的整体大小,而不是屏幕的当前分辨率。 – Baz

2

下面的代码将迫使窗口总是听Resize保持一个尺寸的屏幕宽度和高度的80%事件。请记住,通过此方法可防止手动调整大小:

public class StackOverflow 
{ 
    public static void main(String[] args) 
    { 
     final Display display = new Display(); 
     final Shell shell = new Shell(display); 
     shell.setText("StackOverflow"); 
     shell.setLayout(new GridLayout(1, true)); 

     shell.addListener(SWT.Resize, new Listener() 
     { 
      @Override 
      public void handleEvent(Event arg0) 
      { 
       int[] res = getResolution(); 
       shell.setSize((int) (res[0] * 0.8), (int) (res[1] * 0.8)); 
      } 
     }); 

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

    private static int[] getResolution() { 
     Toolkit toolkit = Toolkit.getDefaultToolkit(); 
     Dimension dim = toolkit.getScreenSize(); 

     int[] result = new int[2]; 
     result[0] = dim.width; 
     result[1] = dim.height; 

     return result; 
    } 
} 

此方法使用AWT来获取分辨率。用于获取分辨率的全SWT的做法是:

private static int[] getResolution() { 
    Rectangle monitor = Display.getDefault().getPrimaryMonitor().getBounds(); 

    int[] result = new int[2]; 
    result[0] = monitor.width; 
    result[1] = monitor.height; 

    return result; 
} 

请注意,此方法考虑了当前屏幕的屏幕分辨率,而不是台式机的整体尺寸(使用多屏幕设置时) 。