Java 寻找可调整大小的SWT(JFace)文本区域组件(带夹持器)
我希望在我的一个Eclipse插件中有一个可调整大小的文本区域。它应该在右下角有一个夹持器,可以拖动该夹持器来更改文本区域的大小,类似于下面的html示例:Java 寻找可调整大小的SWT(JFace)文本区域组件(带夹持器),java,swt,textarea,resizable,Java,Swt,Textarea,Resizable,我希望在我的一个Eclipse插件中有一个可调整大小的文本区域。它应该在右下角有一个夹持器,可以拖动该夹持器来更改文本区域的大小,类似于下面的html示例: 这是一个可调整大小的html文本区域,右下角有一个抓手。如何使用SWT JFace创建类似的东西? 在Baz的帮助下,我找到了以下解决方案。它不是完美的,但是很实用,可以作为其他人的起点。请注意,父布局尚未适应新的大小。下面的示例尚未为rect大小设置最小值 //toolkit FormToolkit toolkit =
这是一个可调整大小的html文本区域,右下角有一个抓手。如何使用SWT JFace创建类似的东西?
在Baz的帮助下,我找到了以下解决方案。它不是完美的,但是很实用,可以作为其他人的起点。请注意,父布局尚未适应新的大小。下面的示例尚未为rect大小设置最小值
//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);
可能有用吗?