我实现了一个带有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,显示效果再次良好(即使2行上有“组件1”和“组件2”)。
问题
如何强制ContentPanel重新显示其内容?
到目前为止,我发现的唯一方法是(非常)丑陋:在contentPanel上添加一个resize处理程序,将width设置为width-1。
问题是这个处理程序生成另一个resize事件,导致无限循环。但是在Timer的帮助下,我验证了显示问题是通过这种宽度变化来解决的:
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);
}
});
有什么想法吗?