有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Eclipse4中的java设置固定部件大小

我有一个应用程序,我在e4建设,但有困难得到一对夫妇的部分是一个固定的大小。我有一个PartSashContainer,里面有两个Parts和另一个PartSashContainer。我最初在containerData参数中设置大小,但这些值是相对的,仍然允许重新调整零件的大小。我想确保这些零件的高度是固定的,不能重新调整尺寸。有没有一个简单的方法可以做到这一点

List view from Application.e4xmi


共 (3) 个答案

  1. # 1 楼答案

    Eclipse bug361731是对该功能的请求。目前尚未实施

    也许可以使用自定义渲染器,但这是一项艰巨的工作

  2. # 2 楼答案

    我不确定这在Neon之前是否可用,但Eclipse Neon允许您将“NoMove”作为标记添加到Part Sash Container中,您希望锁定它,而不是调整其大小

  3. # 3 楼答案


    我有一个非常类似的任务,并且多次偶然发现了你的问题。我需要实现一个RCP应用程序,遵循带有固定大小应用程序页眉和固定大小页脚的公司设计。我没有找到完美的方法,但是vogella tutorial on custom renderers给了我一些提示。我仍然需要复制一些代码,我没有找到一个聪明的方法

    我的要求:

    • 应用程序标题位于顶部,高度固定,顶部无控件 标题
    • 应用程序标题位于顶部,大小固定,标题上方没有控件
    • 应用程序页脚位于底部,同样具有固定高度

    所以我做的是:

    • 删除第一部分(主菜单、, 工具条…)
    • 创建包含1个部件(页眉)、2个所需控件(内容)、3个最后部件(页脚)的部件窗扇容器
    • 在本部分中,窗扇容器执行以下操作:
      1. 在“标签”中添加“fx_fixedLayout”(因为我不想重新调整窗扇的尺寸)
      2. 将“CUSTOM_RENDERER_UI=my.RENDERER.mainshashrenderer”添加到“Persisted” 国家“
    • 创建一份 “org.eclipse.e4.ui.workbench.renderers.swt.SashLayout”并命名 “my.renderer.mainshashlayout”。更改方法“tileSubNodes”并设置 第一个和最后一个孩子的固定高度
    • 扩展类“SashRenderer”并将其称为“MainSashRenderer”
    • 创建一个新的“MainWorkbenchRenderFactory” “WorkbenchRenderFactory”,用于连接新的渲染器。这门课 仅将“MainSashRenderer”附加到“MPartSashContainer”对象 有一个特定的ID(因为我希望所有其他的腰带都不被碰)

    public class MainWorkbenchRendererFactory extends WorkbenchRendererFactory {
    
        private final static String MAIN_SASH_ID = "myapp.partsashcontainer.main";
    
        @Override
        public AbstractPartRenderer getRenderer(MUIElement uiElement, Object parent) {
            if (uiElement instanceof MPartSashContainer
            && MAIN_SASH_ID.equalsIgnoreCase(((MPartSashContainer)uiElement).getElementId())) {
                MainSashRenderer renderer = new MainSashRenderer();
                super.initRenderer(renderer);
                return renderer;
            }
            return super.getRenderer(uiElement, parent);
        }
    }
    

    在“MainSashRenderer”类中,将引用从“SashLayout”更改为“MainSashLayout”

    在“MainSashLayout”类中,方法tileSubNodes:

        // subsctract size for header and footer:
        availableSpace -= (this.footerHeightPx + this.headerHeightPx);
    
        // Subtract off the room for the sashes
        availableSpace -= ((childCount - 1) * sashWidth);
    
        if (availableSpace < 0)
        availableSpace = 0;
    
        for (MUIElement subNode : visibleChildren) {
    
        if (childNum == 0) {
            newSize = this.headerHeightPx;
        } else if (childNum == visibleChildren.size()-1) {
            newSize = this.footerHeightPx;
        } else {
            // Calc the new size as a %'age of the total
            double ratio = getWeight(subNode) / totalWeight;
            newSize = (int) ((availableSpace * ratio) + 0.5);
        }
    ...
    

    不同窗口大小的结果(页眉和页脚保持其像素高度): Screenshots with different window sizes