vcardviewer.java.svn-base
来自「开源项目openfire的完整源程序」· SVN-BASE 代码 · 共 259 行
SVN-BASE
259 行
/** * $Revision: $ * $Date: $ * * Copyright (C) 2006 Jive Software. All rights reserved. * * This software is published under the terms of the GNU Lesser Public License (LGPL), * a copy of which is included in this distribution. */package org.jivesoftware.spark.ui;import org.jivesoftware.resource.SparkRes;import org.jivesoftware.smackx.packet.VCard;import org.jivesoftware.spark.SparkManager;import org.jivesoftware.spark.UserManager;import org.jivesoftware.spark.util.GraphicUtils;import org.jivesoftware.spark.util.ModelUtil;import org.jivesoftware.spark.util.SwingWorker;import org.jivesoftware.spark.util.log.Log;import java.awt.Color;import java.awt.Cursor;import java.awt.Font;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Image;import java.awt.Insets;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.text.SimpleDateFormat;import javax.swing.BorderFactory;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JLabel;import javax.swing.JPanel;/** * UI to display VCard Information in Wizards, Dialogs, Chat Rooms and any other container. * * @author Derek DeMoro */public class VCardViewer extends JPanel { private Cursor DEFAULT_CURSOR = new Cursor(Cursor.DEFAULT_CURSOR); private Cursor LINK_CURSOR = new Cursor(Cursor.HAND_CURSOR); private final String jid; private final JLabel avatarImage; private static SimpleDateFormat utcFormat = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss"); private String emailAddress = ""; /** * Generate a VCard Panel using the specified jid. * * @param jid the jid to use when retrieving the vcard information. */ public VCardViewer(final String jid) { setLayout(new GridBagLayout()); setOpaque(false); this.jid = jid; avatarImage = new JLabel(); add(avatarImage, new GridBagConstraints(0, 0, 1, 3, 0.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5, 0, 5, 0), 0, 0)); Image aImage = SparkRes.getImageIcon(SparkRes.BLANK_24x24).getImage(); aImage = aImage.getScaledInstance(-1, 64, Image.SCALE_SMOOTH); ImageIcon ico = new ImageIcon(aImage); avatarImage.setIcon(ico); final SwingWorker vcardLoader = new SwingWorker() { VCard vcard = null; public Object construct() { vcard = SparkManager.getVCardManager().getVCard(jid); return vcard; } public void finished() { if (vcard == null) { // Do nothing. return; } ImageIcon icon = null; byte[] bytes = vcard.getAvatar(); if (bytes != null) { try { icon = new ImageIcon(bytes); Image aImage = icon.getImage(); aImage = aImage.getScaledInstance(-1, 48, Image.SCALE_SMOOTH); icon = new ImageIcon(aImage); } catch (Exception e) { Log.error(e); } } else { icon = SparkRes.getImageIcon(SparkRes.DEFAULT_AVATAR_32x32_IMAGE); } if (icon != null && icon.getIconWidth() > 0) { avatarImage.setIcon(icon); avatarImage.setBorder(BorderFactory.createBevelBorder(0, Color.white, Color.lightGray)); } vcard.setJabberId(jid); buildUI(vcard); } }; vcardLoader.start(); } private void buildUI(final VCard vcard) { avatarImage.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent mouseEvent) { if (mouseEvent.getClickCount() == 2) { SparkManager.getVCardManager().viewProfile(vcard.getJabberId(), avatarImage); } } }); String firstName = vcard.getFirstName(); if (firstName == null) { firstName = ""; } String lastName = vcard.getLastName(); if (lastName == null) { lastName = ""; } final JLabel usernameLabel = new JLabel(); usernameLabel.setHorizontalTextPosition(JLabel.LEFT); usernameLabel.setFont(new Font("Dialog", Font.BOLD, 15)); usernameLabel.setForeground(Color.GRAY); if (ModelUtil.hasLength(firstName) && ModelUtil.hasLength(lastName)) { usernameLabel.setText(firstName + " " + lastName); } else { String nickname = SparkManager.getUserManager().getUserNicknameFromJID(jid); usernameLabel.setText(UserManager.unescapeJID(nickname)); } final Icon icon = SparkManager.getChatManager().getIconForContactHandler(vcard.getJabberId()); if (icon != null) { usernameLabel.setIcon(icon); } add(usernameLabel, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 0), 0, 0)); String title = vcard.getField("TITLE"); if (ModelUtil.hasLength(title)) { final JLabel titleLabel = new JLabel(title); titleLabel.setFont(new Font("Dialog", Font.PLAIN, 11)); add(titleLabel, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 7, 0, 0), 0, 0)); } if (ModelUtil.hasLength(vcard.getEmailHome())) { emailAddress = vcard.getEmailHome(); } final Color linkColor = new Color(49, 89, 151); final String unselectedText = "<html><body><font color=" + GraphicUtils.toHTMLColor(linkColor) + "><u>" + emailAddress + "</u></font></body></html>"; final String hoverText = "<html><body><font color=red><u>" + emailAddress + "</u></font></body></html>"; final JLabel emailTime = new JLabel(unselectedText); emailTime.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { startEmailClient(emailAddress); } public void mouseEntered(MouseEvent e) { emailTime.setText(hoverText); setCursor(LINK_CURSOR); } public void mouseExited(MouseEvent e) { emailTime.setText(unselectedText); setCursor(DEFAULT_CURSOR); } }); add(emailTime, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 7, 10, 0), 0, 0)); // Add JID Label final String jid = UserManager.unescapeJID(vcard.getJabberId()); final JLabel jidLabel = new JLabel("<html><body>JID: <font color=" + GraphicUtils.toHTMLColor(linkColor) + "><u>" + jid + "</u></font></body></html>"); jidLabel.setToolTipText("Click to copy jid to clipboard."); jidLabel.addMouseListener(new MouseAdapter() { public void mouseEntered(MouseEvent mouseEvent) { jidLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); } public void mouseExited(MouseEvent mouseEvent) { jidLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } public void mouseClicked(MouseEvent mouseEvent) { SparkManager.setClipboard(jid); } }); add(jidLabel, new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 7, 2, 0), 0, 0)); // Add Home Phone String homeNumber = vcard.getPhoneHome("VOICE"); if (!ModelUtil.hasLength(homeNumber)) { homeNumber = "n/a"; } final JLabel homePhoneLabel = new JLabel("Home: " + homeNumber); add(homePhoneLabel, new GridBagConstraints(1, 4, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 7, 2, 0), 0, 0)); // Add Work Phone String workNumber = vcard.getPhoneWork("VOICE"); if (!ModelUtil.hasLength(workNumber)) { workNumber = "n/a"; } final JLabel workPhoneLabel = new JLabel("Work: " + workNumber); add(workPhoneLabel, new GridBagConstraints(1, 5, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 7, 2, 0), 0, 0)); // Add Cell Phone String cellNumber = vcard.getPhoneWork("CELL"); if (!ModelUtil.hasLength(cellNumber)) { cellNumber = "n/a"; } final JLabel cellPhoneLabel = new JLabel("Cell: " + cellNumber); add(cellPhoneLabel, new GridBagConstraints(1, 6, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 7, 2, 0), 0, 0)); // Add Company String company = vcard.getOrganization(); final JLabel orgLabel = new JLabel("Company: " + company); add(orgLabel, new GridBagConstraints(1, 7, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 7, 2, 0), 0, 0)); } private void startEmailClient(String emailAddress) { SparkManager.getNativeManager().launchEmailClient(emailAddress, ""); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?