@IMEventHandler(IMEventType.SHOW_MEMBERS_WINDOW) protected void showMembersWindow(IMEvent event) { UINamedObject named = (UINamedObject) event.getTarget(); Window win = event.getData("view"); Rectangle rect = win.getBounds(); setLocation(rect.x + rect.width - 30, rect.y + 25); setIconImage(named.getIcon()); setTitle(named.getName()); this.namedObject = named; progressOverlay.setShowLoad(true); setVisible(true); isLoadFace = true; // 设置允许下载头像 checkReloadMembers(namedObject); // 显示成员 win.addComponentListener( new ComponentAdapter() { @Override public void componentMoved(ComponentEvent e) { int x = e.getComponent().getX() + e.getComponent().getWidth() - 30; int y = e.getComponent().getY() + 25; if (isPtInRect(getBounds(), new Point(x, y))) { setLocation(x, y); } } }); }
private void reloadMembers() { GroupMemberListModel model = (GroupMemberListModel) listModels.get(namedObject.getEntity()); List<? extends QQStranger> members = getMembers(); if (model == null) { model = new GroupMemberListModel(new UserListComparator()); for (QQStranger m : members) { model.addElement(new UserListElement(new UIUser(m))); // 下载头像, 只下载一次,后面是手动更新 if (isLoadFace) { IMEventService events = getContext().getSerivce(IMService.Type.EVENT); events.broadcast(new IMEvent(IMEventType.USER_FACE_REQUEST, m)); } } listModels.put(namedObject.getEntity(), model); } model.sort(); // 根据状态排序 membersCount.setText("Members (" + getOnlineCount(members) + "/" + members.size() + ")"); if (model != memberList.getModel()) { memberList.setModel(model); } model.updateAll(); // 停止进度条 progressOverlay.setShowLoad(false); }
/** 成员搜索 content */ private void initSeacher() { final WebPanel headerPl = new WebPanel(); membersCount = new WebLabel("Members (0/0)"); membersCount.setMargin(0, 5, 0, 0); WebButton searcherBtn = WebButton.createIconWebButton( IMImageUtil.getScaledInstance(SkinUtils.getImageIcon("searchNormal"), 18, 18), StyleConstants.smallRound, true); final WebTextField seacherTxt = new WebTextField("Find a contact..."); seacherTxt.setForeground(Color.LIGHT_GRAY); seacherTxt.setVisible(false); headerPl.add(membersCount, BorderLayout.CENTER); headerPl.add(searcherBtn, BorderLayout.LINE_END); headerPl.add(seacherTxt, BorderLayout.PAGE_END); progressOverlay = new WebProgressOverlay(); progressOverlay.setComponent(headerPl); content.add(progressOverlay, BorderLayout.PAGE_START); searcherBtn.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (!seacherTxt.isVisible()) { seacherTxt.setVisible(true); headerPl.revalidate(); headerPl.repaint(); } else if (seacherTxt.isVisible()) { seacherTxt.setVisible(false); headerPl.revalidate(); headerPl.repaint(); } } }); seacherTxt.addFocusListener( new FocusListener() { @Override public void focusLost(FocusEvent e) { seacherTxt.setText("Find a contact..."); } @Override public void focusGained(FocusEvent e) { seacherTxt.setText(""); } }); }