📄 vcardeditor.java.svn-base
字号:
/**
* $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.sparkimpl.profile;
import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.packet.VCard;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.component.TitlePanel;
import org.jivesoftware.spark.ui.VCardViewer;
import org.jivesoftware.spark.ui.status.StatusBar;
import org.jivesoftware.spark.util.GraphicUtils;
import org.jivesoftware.spark.util.ModelUtil;
import org.jivesoftware.spark.util.log.Log;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.net.MalformedURLException;
/**
* Handles the UI for viewing and editing of VCard information.
*/
public class VCardEditor {
private BusinessPanel businessPanel;
private PersonalPanel personalPanel;
private HomePanel homePanel;
private AvatarPanel avatarPanel;
private JLabel avatarLabel;
/**
* Displays the VCard for an individual.
*
* @param vCard the users vcard.
* @param parent the parent component, used for location.
*/
public void editProfile(final VCard vCard, JComponent parent) {
final JTabbedPane tabbedPane = new JTabbedPane();
// Initialize Panels
personalPanel = new PersonalPanel();
personalPanel.showJID(false);
tabbedPane.addTab(Res.getString("tab.personal"), personalPanel);
businessPanel = new BusinessPanel();
tabbedPane.addTab(Res.getString("tab.business"), businessPanel);
homePanel = new HomePanel();
tabbedPane.addTab(Res.getString("tab.home"), homePanel);
avatarPanel = new AvatarPanel();
tabbedPane.addTab(Res.getString("tab.avatar"), avatarPanel);
// Build the UI
buildUI(vCard);
final JOptionPane pane;
final JDialog dlg;
TitlePanel titlePanel;
ImageIcon icon = VCardManager.getAvatarIcon(vCard);
if (icon == null) {
icon = SparkRes.getImageIcon(SparkRes.BLANK_24x24);
}
// Create the title panel for this dialog
titlePanel = new TitlePanel(Res.getString("title.edit.profile"), Res.getString("message.save.profile"), icon, true);
// Construct main panel w/ layout.
final JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(titlePanel, BorderLayout.NORTH);
// The user should only be able to close this dialog.
Object[] options = {Res.getString("save"), Res.getString("cancel")};
pane = new JOptionPane(tabbedPane, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, options, options[0]);
mainPanel.add(pane, BorderLayout.CENTER);
JOptionPane p = new JOptionPane();
dlg = p.createDialog(parent, Res.getString("title.profile.information"));
dlg.setModal(false);
dlg.pack();
dlg.setSize(600, 400);
dlg.setResizable(true);
dlg.setContentPane(mainPanel);
dlg.setLocationRelativeTo(parent);
PropertyChangeListener changeListener = new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
String value = (String)pane.getValue();
if (Res.getString("cancel").equals(value)) {
pane.removePropertyChangeListener(this);
dlg.dispose();
}
else if (Res.getString("save").equals(value)) {
pane.removePropertyChangeListener(this);
dlg.dispose();
saveVCard();
}
}
};
pane.addPropertyChangeListener(changeListener);
avatarPanel.setParentDialog(dlg);
dlg.setVisible(true);
dlg.toFront();
dlg.requestFocus();
personalPanel.focus();
}
/**
* Displays the VCard for an individual.
*
* @param vCard the users vcard.
* @param parent the parent component, used for location.
*/
public void viewFullProfile(final VCard vCard, JComponent parent) {
final JTabbedPane tabbedPane = new JTabbedPane();
// Initialize Panels
personalPanel = new PersonalPanel();
personalPanel.allowEditing(false);
personalPanel.showJID(false);
tabbedPane.addTab(Res.getString("tab.personal"), personalPanel);
businessPanel = new BusinessPanel();
businessPanel.allowEditing(false);
tabbedPane.addTab(Res.getString("tab.business"), businessPanel);
homePanel = new HomePanel();
homePanel.allowEditing(false);
tabbedPane.addTab(Res.getString("tab.home"), homePanel);
avatarPanel = new AvatarPanel();
avatarPanel.allowEditing(false);
tabbedPane.addTab(Res.getString("tab.avatar"), avatarPanel);
// Build the UI
buildUI(vCard);
final JOptionPane pane;
final JDialog dlg;
TitlePanel titlePanel;
ImageIcon icon = VCardManager.getAvatarIcon(vCard);
if (icon == null) {
icon = SparkRes.getImageIcon(SparkRes.BLANK_24x24);
}
// Create the title panel for this dialog
titlePanel = new TitlePanel(Res.getString("title.profile.information"), "", icon, true);
// Construct main panel w/ layout.
final JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(titlePanel, BorderLayout.NORTH);
// The user should only be able to close this dialog.
Object[] options = {Res.getString("close")};
pane = new JOptionPane(tabbedPane, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, options, options[0]);
mainPanel.add(pane, BorderLayout.CENTER);
JOptionPane p = new JOptionPane();
dlg = p.createDialog(parent, Res.getString("title.profile.information"));
dlg.setModal(false);
dlg.pack();
dlg.setSize(600, 400);
dlg.setResizable(true);
dlg.setContentPane(mainPanel);
dlg.setLocationRelativeTo(parent);
PropertyChangeListener changeListener = new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
Object o = pane.getValue();
if (o instanceof Integer) {
pane.removePropertyChangeListener(this);
dlg.dispose();
return;
}
String value = (String)pane.getValue();
if (Res.getString("close").equals(value)) {
pane.removePropertyChangeListener(this);
dlg.dispose();
}
}
};
pane.addPropertyChangeListener(changeListener);
dlg.setVisible(true);
dlg.toFront();
dlg.requestFocus();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -