diff --git a/designer-base/src/main/java/com/fr/design/remote/ui/UserManagerPane.java b/designer-base/src/main/java/com/fr/design/remote/ui/UserManagerPane.java index 97ffdd3b62..89fe84b63a 100644 --- a/designer-base/src/main/java/com/fr/design/remote/ui/UserManagerPane.java +++ b/designer-base/src/main/java/com/fr/design/remote/ui/UserManagerPane.java @@ -13,7 +13,7 @@ import com.fr.design.remote.ui.list.AddedMemberListCellRender; import com.fr.design.remote.ui.list.AddingMemberList; import com.fr.design.remote.ui.list.AddingMemberListCellRender; import com.fr.design.remote.ui.list.MemberListSelectedChangeListener; -import com.fr.general.Inter; +import com.fr.locale.InterProviderFactory; import com.fr.stable.StringUtils; import com.fr.third.guava.collect.ImmutableList; import com.fr.workspace.WorkContext; @@ -23,9 +23,12 @@ import com.fr.workspace.server.authority.decision.DecisionOperator; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; import javax.swing.JPanel; +import javax.swing.JViewport; import javax.swing.ListSelectionModel; import javax.swing.SwingWorker; import javax.swing.border.EmptyBorder; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; @@ -33,10 +36,15 @@ import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.AdjustmentEvent; +import java.awt.event.AdjustmentListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; @@ -45,10 +53,15 @@ import java.util.List; */ public class UserManagerPane extends BasicPane { + /** + * 每页个数 + */ + private final int DEFAULT_NUM_EACH_PAGE = 50; + /** * 获取的决策平台成员 */ - private List addingMembers = new ArrayList<>(); + private final List addingMembers = new ArrayList<>(); /** * 添加到设计的决策平台成员 */ @@ -73,7 +86,7 @@ public class UserManagerPane extends BasicPane { private ActionListener keyButtonActionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - searchAddingMembers(keyField.getText()); + searchAddingMembers(keyWord); } }; @@ -84,9 +97,9 @@ public class UserManagerPane extends BasicPane { @Override public void keyReleased(KeyEvent e) { // 判断按下的键是否是回车键 - // todo 对话框回车键绑定的是对话框的确定按钮 + // 对话框回车键绑定的是对话框的确定按钮,因此按确定没有办法搜索 if (e.getKeyCode() == KeyEvent.VK_ENTER) { - searchAddingMembers(keyField.getText()); + searchAddingMembers(keyWord); } } }; @@ -125,7 +138,7 @@ public class UserManagerPane extends BasicPane { sync2AddedMembersFormAdded(); // 不需要重复更新右侧列表显示 但是更新一下计数显示 countLabel.setText( - Inter.getLocText("Fine-Designer_Remote_Design_Selected_Member_Count", + InterProviderFactory.getProvider().getLocText("Fine-Designer_Remote_Design_Selected_Member_Count", String.valueOf(addedMembers.size()) ) ); @@ -134,9 +147,47 @@ public class UserManagerPane extends BasicPane { } }; + + + /** + * 已经添加的成员列表 + */ private AddedMemberList addedList; + /** + * 待添加的成员列表 + */ private AddingMemberList addingList; + /** + * 搜索关键字 + */ + private String keyWord; + + /** + * 搜索关键词变更监听 + */ + private DocumentListener documentListener = new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + keyWord = keyField.getText(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + keyWord = keyField.getText(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + keyWord = keyField.getText(); + } + }; + + /** + * 当前分页计数 + */ + private int pageNum = 1; + public UserManagerPane() { this.setBorder(BorderFactory.createEmptyBorder()); @@ -155,7 +206,7 @@ public class UserManagerPane extends BasicPane { @Override protected String title4PopupWindow() { - return Inter.getLocText("Fine-Designer_Remote_Design_Add_Member"); + return InterProviderFactory.getProvider().getLocText("Fine-Designer_Remote_Design_Add_Member"); } private JPanel createLeftPanel() { @@ -165,7 +216,7 @@ public class UserManagerPane extends BasicPane { BorderFactory.createCompoundBorder( new EmptyBorder(6, 0, 0, 0), UITitledBorder.createBorderWithTitle( - Inter.getLocText("Fine-Designer_Remote_Design_Decision_Member") + InterProviderFactory.getProvider().getLocText("Fine-Designer_Remote_Design_Decision_Member") ) ) ); @@ -176,7 +227,8 @@ public class UserManagerPane extends BasicPane { keyField.setPreferredSize(new Dimension(250, 20)); keyField.requestFocus(); keyField.addKeyListener(keyFieldKeyListener); - keyButton.setText(Inter.getLocText("Fine-Designer_Remote_Design_Search")); + keyField.getDocument().addDocumentListener(documentListener); + keyButton.setText(InterProviderFactory.getProvider().getLocText("Fine-Designer_Remote_Design_Search")); keyButton.addActionListener(keyButtonActionListener); searchPanel.add(keyField); searchPanel.add(keyButton); @@ -189,7 +241,25 @@ public class UserManagerPane extends BasicPane { resetMembers(); addToMemberList(); searchAddingMembers(StringUtils.EMPTY); - UIScrollPane listPane = new UIScrollPane(addingList); + final UIScrollPane listPane = new UIScrollPane(addingList); + listPane.addMouseWheelListener(new MouseWheelListener() { + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + JViewport vp = listPane.getViewport(); + if (vp.getView().getHeight() <= vp.getHeight() + vp.getViewPosition().y) { + loadMoreAddingMembers(keyWord, DEFAULT_NUM_EACH_PAGE); + } + } + }); + listPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() { + @Override + public void adjustmentValueChanged(AdjustmentEvent e) { + JViewport vp = listPane.getViewport(); + if (vp.getView().getHeight() <= vp.getHeight() + vp.getViewPosition().y && e.getValueIsAdjusting()) { + loadMoreAddingMembers(keyWord, DEFAULT_NUM_EACH_PAGE); + } + } + }); listPane.setBorder(BorderFactory.createEmptyBorder()); content.add(searchPanel, BorderLayout.NORTH); @@ -205,14 +275,14 @@ public class UserManagerPane extends BasicPane { BorderFactory.createCompoundBorder( new EmptyBorder(6, 0, 0, 0), UITitledBorder.createBorderWithTitle( - Inter.getLocText("Fine-Designer_Remote_Design_Selected_Member") + InterProviderFactory.getProvider().getLocText("Fine-Designer_Remote_Design_Selected_Member") ) ) ); // 计数 countLabel.setText( - Inter.getLocText("Fine-Designer_Remote_Design_Selected_Member_Count", + InterProviderFactory.getProvider().getLocText("Fine-Designer_Remote_Design_Selected_Member_Count", String.valueOf(addedMembers.size())) ); countLabel.setBorder(BorderFactory.createEmptyBorder(7, 12, 8, 0)); @@ -258,7 +328,7 @@ public class UserManagerPane extends BasicPane { addedList.revalidate(); addedList.repaint(); countLabel.setText( - Inter.getLocText("Fine-Designer_Remote_Design_Selected_Member_Count", + InterProviderFactory.getProvider().getLocText("Fine-Designer_Remote_Design_Selected_Member_Count", String.valueOf(addedMembers.size()) )); } @@ -280,7 +350,10 @@ public class UserManagerPane extends BasicPane { protected List doInBackground() { addingMembers.clear(); String username = WorkContext.getConnector().currentUser(); - addingMembers.addAll(WorkContext.getCurrent().get(DecisionOperator.class).getMembers(username, keyword)); + synchronized (addingMembers) { + addingMembers.addAll(WorkContext.getCurrent().get(DecisionOperator.class).getMembers(username, keyword)); + pageNum = 1; + } return addingMembers; } @@ -292,6 +365,31 @@ public class UserManagerPane extends BasicPane { getMemberWorker.execute(); } + private void loadMoreAddingMembers(final String keyword, final int count) { + + final SwingWorker loadMoreWorker = new SwingWorker, Void>() { + @Override + protected List doInBackground() { + String username = WorkContext.getConnector().currentUser(); + synchronized (addingMembers) { + Collection more = + WorkContext.getCurrent().get(DecisionOperator.class).getMembers(username, keyword, pageNum + 1, count); + if (!more.isEmpty()) { + pageNum += 1; + } + addingMembers.addAll(more); + } + return addingMembers; + } + + @Override + protected void done() { + addToMemberList(); + } + }; + loadMoreWorker.execute(); + } + private void sync2AddedMembersFromAdding() { RemoteDesignMember[] members = new RemoteDesignMember[addingListModel.getSize()];