【问题标题】:Scout Eclipse Neon two columns with fix widthScout Eclipse Neon 两列固定宽度
【发布时间】:2016-06-29 09:39:41
【问题描述】:

我有表格,我想把它分成两列。首先是长且可滚动的,其他需要始终保持在右侧。第二列的宽度需要很小,这样就不会占用太多的屏幕空间。

我的代码看起来像这样:

@Order(1000.0)
public class MainBox extends AbstractGroupBox {

    @Override
    protected TriState getConfiguredScrollable() {

      return TriState.FALSE;
    }

    @Order(1000.0)
    public class OfferBox extends SxAbstractGroupBox {

      @Override
      protected TriState getConfiguredScrollable() {

        return TriState.TRUE;
      }

      @Override
      protected int getConfiguredGridColumnCount() {

        return 1;
      }

      @Override
      protected int getConfiguredGridX() {

        return 0;
      }

      @Override
      protected int getConfiguredGridY() {

        return 0;
      }

      @Override
      protected double getConfiguredGridWeightX() {

        return 1; // This should stretch this box 
      }
      ......
    }

    @Order(4000.0)
    public class ShortCutBox extends AbstractGroupBox {

      @Override
      protected TriState getConfiguredScrollable() {

        return TriState.TRUE;
      }

      @Override
      protected int getConfiguredGridColumnCount() {

         return 1;
      }

      @Override
      protected int getConfiguredGridX() {

         return 1;
      }

      @Override
      protected int getConfiguredGridY() {

         return 0;
      }

     @Override
     protected double getConfiguredGridWeightX() {

        return 0; // this defined that box shouldn't stretch
     }

     @Override
     protected int getConfiguredWidthInPixel() {

         return 200;  // This should give me fix width 200
     }

     @Order(4100)
     public class MyButton1 extends AbstractButton {

     }

     @Order(4200)
     public class MyButton2 extends AbstractButton {

     }
     ....
  }
}

但是这种配置给出了这样的布局:

如果我将按钮设置为有

@Override
protected int getConfiguredHorizontalAlignment() {

   return 1;
}

它看起来是正确的,但问题是盒子仍然是右边的盒子仍然延伸到左边的盒子上,所以滚动和点击字段在左侧面板的右侧不起作用。 (黑色矩形内)

我错过了什么?

【问题讨论】:

    标签: layout eclipse-scout


    【解决方案1】:

    我刚刚查看了您的问题,我可以通过执行以下操作来构建我认为您想要的布局:

    1。 我添加了getConfiguredGridW() 方法,将 1 返回到您的两个分组框,以实现每个分组框仅跨越一列(父分组框的网格列数=2)。

    2。 此外,我从两个组框中删除了 getConfiguredGridX()getConfiguredGridY() 方法,因为我认为它们不是必需的,因为当父组框的 getConfiguredGridColumnCount() 返回 2(或默认值)时,Scout 会自动以这种方式排序它们)。

    3。 这是最重要的: 在每个按钮中,我覆盖 getConfiguredProcessButton() 返回 false(而不是默认情况下为 true),正如我所经历的那样,当将按钮声明为非进程按钮时,侦察员以不同的方式构建其网格布局。 Java 文档还说:

    配置此按钮是否为进程按钮。流程按钮通常显示在表单底部的专用按钮栏上。非进程按钮可以放置在表单的任何位置。 子类可以覆盖此方法。默认为真。

    4。 这是可选的: 添加getConfiguredFillHorizontal()并返回true,使右侧分组框中的所有按钮都放大到父分组框的宽度。

    我的整个安排是这样的:

    @Order(1000.0)
    public class MainBox extends AbstractGroupBox {
    
        @Override
        protected TriState getConfiguredScrollable() {
    
            return TriState.FALSE;
        }
    
        @Order(1000.0)
        public class OfferBox extends AbstractGroupBox {
    
            @Override
            protected TriState getConfiguredScrollable() {
    
                return TriState.TRUE;
            }
    
            @Override
            protected int getConfiguredGridColumnCount() {
    
                return 1;
            }
    
            @Override
            protected int getConfiguredGridW() {
                return 1;   // XXX: Added
            }
    
            /*
            // XXX: Removed
            @Override
            protected int getConfiguredGridX() {
    
                return 0;
            }
    
            @Override
            protected int getConfiguredGridY() {
    
                return 0;
            }
            */
    
            @Override
            protected double getConfiguredGridWeightX() {
    
                return 1; // This should stretch this box
            }
    
            @Override
            protected void injectFieldsInternal(OrderedCollection<IFormField> fields) {
                // Used to inject some dummy fields to enable scrolling
                for (int i = 0; i < 30; i++) {
                     // Add some fields here
                }
            }
        }
    
        @Order(4000.0)
        public class ShortCutBox extends AbstractGroupBox {
    
            @Override
            protected TriState getConfiguredScrollable() {
    
                return TriState.TRUE;
            }
    
            @Override
            protected int getConfiguredGridColumnCount() {
    
                return 1;
            }
    
            @Override
            protected int getConfiguredGridW() {
                return 1;   // XXX: Added
            }
    
            /*
            // XXX: Removed
            @Override
            protected int getConfiguredGridX() {
    
                return 1;
            }
    
            @Override
            protected int getConfiguredGridY() {
    
                return 0;
            }
            */
    
            @Override
            protected double getConfiguredGridWeightX() {
    
                return 0; // this defined that box shouldn't stretch
            }
    
            @Override
            protected int getConfiguredWidthInPixel() {
    
                return 200; // This should give me fix width 200
            }
    
            @Order(4100)
            public class MyButton1 extends AbstractButton {
    
                @Override
                protected String getConfiguredLabel() {
                    return "Button 1";
                }
    
                @Override
                protected boolean getConfiguredProcessButton() {
                    return false;   // XXX: Added
                }
    
                @Override
                protected boolean getConfiguredFillHorizontal() {
                    return true; // XXX: This is optional
                }
            }
    
            @Order(4200)
            public class MyButton2 extends AbstractButton {
    
                @Override
                protected String getConfiguredLabel() {
                    return "Button 2";
                }
    
                @Override
                protected boolean getConfiguredProcessButton() {
                    return false;   // XXX: Added
                }
    
                @Override
                protected boolean getConfiguredFillHorizontal() {
                    // XXX: This is optional. Enlarge buttons to group box width
                    return true;
                }
            }
        }
    }
    

    结果: Final Layout,请忽略滚动条工具提示覆盖;)

    如果这对你有用,请告诉我!

    最好的问候, 马蒂亚斯

    【讨论】:

    • 是的,这是有效的。我实际上已经将进程按钮设置为 false,所以我只需要添加 getConfiguredGridW() 就可以了。
    猜你喜欢
    • 2016-06-29
    • 2016-04-24
    • 1970-01-01
    • 2016-09-22
    • 2016-07-08
    • 2016-07-16
    • 2016-09-16
    • 2016-07-24
    • 2016-06-01
    相关资源
    最近更新 更多