当前位置: 首页 > 知识库问答 >
问题:

使用抓取器查找可调整大小的SWT(JFace)文本区域组件

施飞昂
2023-03-14

我希望在我的一个Eclipse插件中有一个可调整大小的文本区域。它的右下角应该有一个可以通过拖动来改变文本区域大小的抓取器,类似于下面的html示例

<!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>

我已经能够创建一个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);

而不是滚动条,我希望有一个能够调整文本字段大小垂直和水平。

这里有Text元素的文档,但我找不到gripper选项:http://help.eclipse.org/kepler/index.jsp?topic=%2forg.eclipse.platform.doc.isv%2freference%2fapi%2forg%2feclipse%2fswt%2fwidgets%2ftext.html

如何向文本添加夹持器?

是否有一个完成的控件提供了我要找的功能?(我看了一下nebula小部件,但似乎没有带有GRIPPER的文本区域组件。)

共有1个答案

孙才捷
2023-03-14

在巴兹的帮助下,我找到了以下解决办法。它不是完美的,但有点工作,可能是有用的起点,为其他人。请不要说父布局还不适应新的大小。并且下面的示例还没有设置矩形大小的最小值。

    //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);
 类似资料:
  • 我遇到了一个棘手的问题。 在摆动环境中,有一个功能在AWT组件中可用文本区域。但是,这在 JFace 或 Swing 环境中都不存在。 有人想出解决办法吗?我必须自己制作界面吗? 提前谢谢

  • 问题内容: 有关于这个另一个线程,我已经试过。但是有一个问题:删除内容不会缩小。我找不到任何将其缩小为正确大小的方法-该值会以的完整大小返回,而不是其内容的大小。 该页面上的代码如下: 问题答案: 这对我有效(Firefox 3.6 / 4.0和Chrome 10/11): _如果您想在jsfiddle _上尝试它,它以一行开始,并且仅增长所需的确切数量。可以使用一个,但是我想写一些这样的东西(在

  • 问题内容: 我需要一个textarea,在框中输入文字,它会根据需要增加长度,以避免必须处理滚动条,并且在删除文本后需要缩小!我不想沿着mootools或jquery路线走,因为我有一个轻量级的表单。 问题答案: 您可以通过设置为,然后读取属性来检查内容的高度: 它可以在Firefox 3,IE 7,Safari,Opera和Chrome下运行。

  • 问题内容: 有关于这个另一个线程,我已经试过。但是有一个问题:删除内容不会缩小。我找不到任何将其缩小为正确大小的方法-该值会以的完整大小返回,而不是其内容的大小。 该页面上的代码如下: 问题答案: 这对我有效(Firefox 3.6 / 4.0和Chrome 10/11): 如果您想在jsfiddle上尝试它,它以一行开始,并且仅增长所需的确切数量。可以使用一个,但是我想写一些这样的东西(在一个大

  • 当我尝试创建复合表列时出错?

  • 通常,列表可以实现为链表(遍历速度较慢),也可以实现为数组列表(插入元素时速度较慢)。 我想知道是否有可能使用处理器的MMU来更有效地实现列表,只要插入或删除一个元素,就可以重新映射而不是复制内存。这意味着数组中任何地方的索引和插入/删除速度都要达到O(1),比任何其他列表实现都要好。 我的问题是: 程序是否真的能够控制自己的虚拟内存,或者是否需要对操作系统进行更改 每个进程的页表条目数是否有限制