4

我正在制作一个基于 Eclipse e4 框架的应用程序。我想知道如何控制应用程序窗口的最小尺寸。为此目的,似乎无法在 e4xmi 文件中定义任何属性。

有谁知道该怎么做?

我在 Eclipse 社区论坛 ( http://www.eclipse.org/forums/index.php/t/244875/ ) 中找到了一个帖子,说可以通过创建自己的渲染器来实现。我该怎么做呢?

非常感谢你 :)

4

2 回答 2

2

假设您使用的是内置的 SWT 渲染器,您还可以监听 E4 MWindow 元素的创建并获得对底层 SWT Shell 的访问权限。在此示例中,侦听器在 AddOn 中注册,您可以将其添加到您的 e4xmi。

import javax.annotation.PostConstruct;

import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.workbench.UIEvents;
import org.eclipse.swt.widgets.Shell;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventHandler;

public class MinSizeAddon {
    @PostConstruct
    public void init(final IEventBroker eventBroker) {
        EventHandler handler = new EventHandler() {
            @Override
            public void handleEvent(Event event) {
                if (!UIEvents.isSET(event))
                    return;

                Object objElement = event.getProperty(UIEvents.EventTags.ELEMENT);
                if (!(objElement instanceof MWindow))
                    return;

                MWindow windowModel = (MWindow)objElement;
                Shell theShell = (Shell)windowModel.getWidget();
                if (theShell == null)
                    return;

                theShell.setMinimumSize(400, 300);
            }
        };
        eventBroker.subscribe(UIEvents.UIElement.TOPIC_WIDGET, handler);
    }
}

请注意,这将针对应用程序中的任何 MWindow 执行,并且可以有更多(即,当 MPart 从 MPartStack 分离到单独的窗口中时)。如果您想将执行限制在特定的 MWindows,我建议在 e4xmi 中向窗口添加一个标签,并在设置最小大小之前检查此标签。

于 2013-04-09T11:40:29.167 回答
0

如果有人仍然希望在 e4 应用程序中执行此操作并且不想滚动他们自己的渲染器,您可以在零件类的后期构造中简单地执行以下操作:

@PostConstruct
public void postConstruct(Composite parent) {
  parent.getShell().setMinimumSize(300, 300);
  //...
}

框架传入的父Composite级使您可以访问Shell,这使您可以设置最小大小。这会阻止应用程序的大小调整为小于指定的最小大小(以像素为单位)。

于 2020-08-20T08:00:59.307 回答