0

我用 BorderLayoutContainer 和 2 ContentPanel 实现了一个水平可拆分面板:

--------------------------------------------------
|  ContentPanel 1           |  ContentPanel2     |
|                           |                    |
| component 1 - component 2 |                    |
|                         <-|->                  |
|                           |                    |
|                           |                    |
--------------------------------------------------

使用此代码:

public class WestCenter extends BorderLayoutContainer {

  private ContentPanel westPanel;
  private ContentPanel centerPanel;

  public WestCenter(){
    westPanel = new ContentPanel();
    centerPanel = new ContentPanel();

    BorderLayoutData westData=new BorderLayoutData(800);
    westData.setSplit(true);
    westData.setCollapsible(true);
    westData.setMinSize(300);
    westData.setMaxSize(2000);
    westData.setMargins(new Margins(0,5,0,0));

    BorderLayoutData centerData=new BorderLayoutData();
    setWestWidget(westPanel, westData);
    setCenterWidget(centerPanel,centerData);
  }
  ...
  //Getters, Setters etc...

}

问题 :

当用户拖动条形图,使“组件 1”和“组件 2”不能再放在同一行时,高度计算出现问题,导致显示效果不佳。

--------------------------------------------------
|  ContentPanel 1  |        ContentPanel2        |
|                  |                             |
| component 1      |                             |
| component 2    <-|->                           |
|                  |                             |
| *bad display for |                             |
| compos here*     |                             |
--------------------------------------------------

如果我手动重新拖动 1px,则显示再次良好(即使“组件 1”和“组件 2”在 2 行上)。

问题

如何强制 ContentPanel 重新显示其内容?

到目前为止,我发现的唯一方法是(非常)丑陋:在 contentPanel 上添加一个调整大小处理程序以将宽度设置为 width-1。

问题是这个处理程序会生成另一个调整大小事件,从而导致无限循环。但在计时器的帮助下,我验证了显示问题已通过这种宽度的变化得到解决:

westPanel.addResizeHandler(new ResizeHandler() {
  @Override
  public void onResize(final ResizeEvent event) {
    Timer t=new Timer(){
      @Override
      public void run() {
        westPanel.setWidth(westPanel.getOffsetWidth()-1);
      }
    };
    t.schedule(2000);
  }
});

有任何想法吗?

4

0 回答 0