2016-11-16 4 views
1

Я хотел бы иметь изменяемую размерную область текста в одном из моих плагинов Eclipse. Он должен иметь захват в нижнем правом углу, который можно перетаскивать, чтобы изменить размер текстовой области, похожий на следующий HTML пример:Ищете изменяемый размер SWT (JFace) компонент текстовой области с захватом

<!DOCTYPE html> 
 
<html> 
 
<body> 
 

 
<textarea rows="4" cols="50"> 
 
This is a resizable html text area with a gripper at the lower right corner. How to create something similar with SWT JFace?</textarea> 
 

 
</body> 
 
</html>

Результат как статическое изображение: Result as Image

Я уже в состоянии создать текст SWT многострочный:

Text textArea = toolkit.createText(parentContainer, "Default text", SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL); 
textArea.setEnabled(isEnabled()); 
textArea.setToolTipText("tooltip"); 

GridData areaData = new GridData(); 
areaData.grabExcessHorizontalSpace = true; 
areaData.horizontalAlignment = GridData.FILL; 
areaData.verticalAlignment = GridData.FILL; 
areaData.grabExcessVerticalSpace = true; 
areaData.heightHint = 80; 
areaData.widthHint = 200; 
textArea.setLayoutData(areaData); 

enter image description here

Вместо полосы прокрутки я хотел бы иметь захват, который может изменять размер текстового поля по вертикали и по горизонтали.

документация для текстового элемента здесь, и я не мог найти вариант рапиры: http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fswt%2Fwidgets%2FText.html

Как я могу добавить эспандер к тексту?

Есть ли размерная панель с захватом, которую я могу использовать для обертывания текста? А «Sash» только кажется, изменяемыми в одном направлении: Can you create a resizable control in SWT?

Есть готовый элемент управления, который обеспечивает функциональность я ищу? (Я посмотрел на виджеты туманности, но, похоже, не имеется текстового компонента с захватом.)

+1

Может быть, [это] (http://stackoverflow.com/questions/12500208/how-do-i-make-it-possible-to-resize-a-composite-by- перетаскивание в угол) может быть полезным? – Baz

ответ

1

С помощью Baz я нашел следующее решение. Это не идеальный, но вроде работающий и может быть полезен в качестве отправной точки для других. Пожалуйста, не то, чтобы родительский макет еще не адаптировался к новому размеру. И нижеприведенный пример еще не установил минимальные значения для прямоугольных размеров.

//toolkit 
    FormToolkit toolkit = new FormToolkit(Display.getCurrent()); 

    //create content composite for label, text area and gripper 
    contentContainer = toolkit.createComposite(parent); 

    GridData fillHorizontal = new GridData(); 
    fillHorizontal.grabExcessHorizontalSpace = true; 
    fillHorizontal.horizontalAlignment = GridData.FILL; 
    contentContainer.setLayoutData(fillHorizontal); 

    GridLayout gridLayout = new GridLayout(1, true); 
    gridLayout.horizontalSpacing = 0; 
    gridLayout.verticalSpacing = 2; 
    gridLayout.marginHeight = 2; 
    gridLayout.marginWidth = 0; 
    contentContainer.setLayout(gridLayout); 

    //label 
    String currentLabel = getLabel(); 
    toolkit.createLabel(contentContainer, currentLabel); 

    //text area 
    textArea = toolkit.createText(contentContainer, get(), SWT.MULTI | SWT.BORDER | SWT.WRAP); 
    textArea.setEnabled(isEnabled()); 
    textArea.setToolTipText(tooltip); 

    GridData areaData = new GridData(); 
    areaData.grabExcessHorizontalSpace = true; 
    areaData.grabExcessVerticalSpace = true; 
    areaData.horizontalAlignment = GridData.FILL; 
    areaData.verticalAlignment = GridData.FILL; 
    areaData.widthHint = 200; 
    areaData.heightHint = 80; 
    textArea.setLayoutData(areaData); 

    //gripper 
    org.eclipse.swt.widgets.Label gripper = toolkit.createLabel(contentContainer, ""); 
    gripper.setImage(Activator.getImage("tracker.png")); 

    GridData tragData = new GridData(); 
    tragData.horizontalAlignment = GridData.END; 
    gripper.setLayoutData(tragData); 

    Listener trackerListener = new Listener() { 

     @Override 
     public void handleEvent(Event e) { 

      Tracker tracker = new Tracker(contentContainer.getParent(), SWT.RESIZE | SWT.DOWN | SWT.RIGHT); 
      Rectangle maxRect = contentContainer.getParent().getBounds(); 
      Rectangle rect = contentContainer.getBounds(); 
      tracker.setRectangles(new Rectangle[] { rect }); 
      if (tracker.open()) { 
       Rectangle after = tracker.getRectangles()[0]; 
       Rectangle newRect = new Rectangle(
         after.x, 
         after.y, 
         Math.min(after.width, maxRect.width - 10), 
         Math.min(after.height, maxRect.height - 10)); 
       contentContainer.setBounds(newRect); 
      } 
      tracker.dispose(); 
     } 
    }; 

    gripper.addListener(SWT.MouseDown, trackerListener); 

enter image description here