2015-06-09 3 views
0

У меня есть приложение, для которого я создал створку, так что пользователи могут изменять размер объектов Styled Text по своему усмотрению. Original

У меня есть ошибка, хотя при максимальном использовании приложения створка очень сильно перемещается в приложении, а затем пользователь не максимизирует приложение, тогда створка все равно выходит за пределы экрана. after maximize then back to original Как я могу сделать так, чтобы, когда пользователь меняет приложение с максимизированного размера на меньший размер, створка автоматически перемещается в пределах размера приложения; как в первом изображении?Sash теряется после изменения размера

Кроме того, есть ли лучший (более динамичный) способ управления лимитами позиции для створки?

separator.addSelectionListener(new SelectionAdapter() { 
      public void widgetSelected(SelectionEvent event) { 
       double height = shlPstmKnowledgeCatalogue.getBounds().height; 
       double qpBtnHeight = btnQuickParts.getBounds().height; 
       double workLblHeight = lblWorkInstructions.getBounds().height; 

       if (!shlPstmKnowledgeCatalogue.getMaximized()) { 
        if (event.y < workLblHeight + 30) { 
         event.y = (int) workLblHeight + 30; 
        } 
        else if (event.y > height - qpBtnHeight - 90) { 
         event.y = (int) (height - qpBtnHeight - 90); 
        } 
       } 
       else { 
        if (event.y < workLblHeight + 30) { 
         event.y = (int) (workLblHeight + 30); 
        } 
        else if (event.y > height - qpBtnHeight - 90) { 
         event.y = (int) (height - qpBtnHeight - 90); 
        } 
       } 
       separator.setBounds(event.x, event.y, event.width, event.height); 
      FormData formData = new FormData(); 
      formData.top = new FormAttachment(0, event.y); 
      formData.left = new FormAttachment(lblScript, 6); 
      formData.right = new FormAttachment(script, 0, SWT.RIGHT); 
      formData.height = 5; 
      separator.setLayoutData(formData); 

      /* 
      * Used to move the script label with the movement of the script 
      * text box. Otherwise, the label gets lost behind the text boxes. 
      */ 
      FormData lblScriptData = new FormData(); 
      lblScriptData.top = new FormAttachment(0, event.y - 5); 
      lblScriptData.bottom = new FormAttachment(0, event.y + 12); 
      lblScriptData.left = new FormAttachment (workInstructions,2, SWT.LEFT); 
      lblScript.setLayoutData(lblScriptData); 
      shlPstmKnowledgeCatalogue.layout(true); 
      } 
     }); 
    /* 
    * Attaches the Work Instuction text box to the sash for dynamic resizing 
    * The resizing is done in relation to the Script text box 
    */ 
    FormData workInstForm = new FormData(); 
    workInstForm.left = new FormAttachment(0, 194); 
    workInstForm.right = new FormAttachment(100, -6); 
    workInstForm.bottom = new FormAttachment(separator, -15); 
    workInstForm.top = new FormAttachment(lblWorkInstructions, 7); 
    workInstructions.setLayoutData(workInstForm); 
    formToolkit.adapt(workInstructions, true, true); 

    /* 
    * Attaches the Script text box to the sash for dynamic resizing 
    * The resizing is done in relation to the work instruction text box 
    */ 
    FormData scriptForm = new FormData(); 
    scriptForm.top = new FormAttachment(separator, 15); 
    scriptForm.right = new FormAttachment(workInstructions, 0, SWT.RIGHT); 
    scriptForm.left = new FormAttachment(workInstructions, 0, SWT.LEFT); 
    scriptForm.bottom = new FormAttachment(btnQuickParts, -6); 
    script.setLayoutData(scriptForm); 
    formToolkit.adapt(script, true, true); 

ответ

0

В конце концов я написал отдельный метод, чтобы постоянно проверять положение створки. Возможно, это не самый эффективный способ сделать это, но он работает!

/** 
* Check the sash position to verify that it is within the bounds of the shell. 
* This is primarily used when the user maxmimizes the application, moves the 
* sash, then minimizes the application. 
*/ 
private void checkSashPosition() { 
    if (!shlPstmKnowledgeCatalogue.isDisposed() && separator.getBounds().y > shlPstmKnowledgeCatalogue.getBounds().height) { 
     separator.setLocation(235, shlPstmKnowledgeCatalogue.getBounds().height - 248); 
     workInstructions.setSize(455, 100); 
     script.setSize(455, 130); 
     script.setLocation(194, 167); 
     lblScript.setLocation(194, 143); 
    } 
} 

Метод вызывается внутри некоторое время петли, а также объекты, которые по отношению к створке также корректируются.

Смежные вопросы