当UI处于多选状态时,表体行的选中状态不会保存下来。表头的选中行改变时,表体行将重新处于非选中状态。
以下为保留选中状态的表体行的UI代码
@Override
protected void initSelfData() {
getBillListPanel().setMultiSelect(true);
getBillListPanel().getHeadBillModel().removeRowStateChangeEventListener();
getBillListPanel().getHeadBillModel().addRowStateChangeEventListener(new HeadRowStateListener());
}
private class HeadRowStateListener implements IBillModelRowStateChangeEventListener
{
public void valueChanged(RowStateChangeEvent e)
{
getBufferData().setCurrentRow(e.getRow());
BillModel model = getBillListPanel().getBodyBillModel();
IBillModelRowStateChangeEventListener l = model.getRowStateChangeEventListener();
model.removeRowStateChangeEventListener();
if (e.isSelectState()) {
getBillListPanel().getChildListPanel().selectAllTableRow();
}else{
getBillListPanel().getChildListPanel().cancelSelectAllTableRow();
}
model.addRowStateChangeEventListener(l);
getBillListPanel().updateUI();
}
}
@Override
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
if (beforeUpdate()) {
try {
if (isListPanelSelected()){
setListBodyData();
int nrow=getBufferData().getCurrentRow();
if (!getBillListPanel().setBodyModelData(nrow))
{
getBillListPanel().setBodyModelDataCopy(nrow);
}
//getBillListPanel().repaint();
int maxSelIndex=getBillListPanel().getHeadTable().getSelectionModel().getMaxSelectionIndex();
int minSelIndex=getBillListPanel().getHeadTable().getSelectionModel().getMinSelectionIndex();
if(nrow>=0&&maxSelIndex==minSelIndex){
getBillListPanel().addEditListener(null);
getBillListPanel().getHeadTable().getSelectionModel().setSelectionInterval(nrow,nrow);
getBillListPanel().addEditListener(this);
}
}
else
setCardUIData(getBufferData().getCurrentVO());
this.getBillCardPanel().updateValue();
//设置单据状态
updateBtnStateByCurrentVO();
} catch (Exception e) {
e.printStackTrace();
showErrorMessage(e.getMessage());
}
if(getUIControl() instanceof ITableTreeController){
setTableToTreeTable();
}
}
afterUpdate();
}
主要是重新定义表头的行选中事件以及修改update方法