我用 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);
}
});
有任何想法吗?