spark是没有签名功能的,为了满足用户的需求,需要加入签名功能,今天搞了搞 。不是很完美,以后会慢慢的完善。 我的思路是 :利用vcard中的中间名,修改成签名信息。
首先,要把布局修改下 workspace 中的buildlayout方法 statusbox.loadvcard 。在声明statusbox时候,进行了statusbox界面加载。 进入org.jivesoftware.spark.ui.status.StatusBar 在 StatusBar的构造方法中 进行了如下修改
add(statusPanel, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(2,12, 0, 0), 0, 0));
add(qianmingLabel, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 7, 0, 0), 0, 0));
add(commandPanel, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, GridBagConstraints.SOUTHWEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 0), 0, 0));
主要做的工作是 吧statuspanel移到了 nicknamelable位置,然后 把 nicknamelable加载到了statuspanel上
在statusbar中 要声明
private JLabel qianmingLabel = new JLabel();
添加两个方法
public void setQianMing(String qianming) {
qianmingLabel.setText(qianming);
}
public JLabel getQianMingLabel() {
return qianmingLabel;
}
String qianming= SparkManager.getVCardManager().getVCard().getMiddleName();
if(qianming!=null) setQianMing(qianming);
然后到statuspanel的构造方法内 进行如下修改
add(nicknameLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
add(iconLabel, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
add(statusLabel, new GridBagConstraints(2, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 2, 0, 0), 0, 0));
statusLabel.setFont(new Font("宋体", Font.PLAIN, 11));
statusLabel.setIcon(SparkRes.getImageIcon(SparkRes.DOWN_ARROW_IMAGE));
statusLabel.setHorizontalTextPosition(JLabel.LEFT);
// nicknameLabel.setToolTipText(SparkManager.getConnection().getUser());
nicknameLabel.setFont(new Font("宋体", Font.BOLD, 12));
主要工作是把nicknamelabel 加到这个面板上。
接下来的工作就是要修改vcard了 把 中间名修改为状态。首先,修改界面
先修改下i18 zh_CN 吧 label.middle.name 修改为 签名信息
然后修改 把firstname 与 middlename进行位置调换
// Handle First Name
JLabel firstNameLabel = new JLabel();
firstNameField = new JTextField();
ResourceUtils.resLabel(firstNameLabel, firstNameField, Res.getString("label.first.name") + ":");
add(firstNameLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
add(firstNameField, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
// Handle Middle Name
JLabel middleNameLabel = new JLabel();
middleNameField = new JTextField();
ResourceUtils.resLabel(middleNameLabel, middleNameField, Res.getString("label.middle.name") + ":");
add(middleNameLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
add(middleNameField, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
然后在 vcardeditor(org.jivesoftware.sparkimpl.profile )saveVCard() 方法 添加如下代码
vcard.setMiddleName(personalPanel.getMiddleName());
SparkManager.getWorkspace().getStatusBar().getQianMingLabel().setText(personalPanel.getMiddleName()); //添加的代码。 作用就是 当点击保存的时候,进行statusbar签名信息更新。
最好 还要修改contactitem 要进行监听,设置签名信息 ,当用户修改签名的时候也要对应的进行更新
setstatusText 这个方法已经修改成了进行签名信息更新了 跟staus没有任何关系了
public void setStatusText(String status) {
String qianming= SparkManager.getVCardManager().getVCard(getJID()).getMiddleName();
if(qianming==null||qianming.equals("")){qianming="";}
getDescriptionLabel().setText(qianming);
// if (ModelUtil.hasLength(status)) {
// getDescriptionLabel().setText(" - " + status);
// }
// else {
// getDescriptionLabel().setText("");
// }
}
最后 在contactitem进行处理,生成contactitem的时候,要进行签名初始化;
// 获取签名信息
VCard vCard = SparkManager.getVCardManager().getVCard(fullyQualifiedJID);
String qianming=vCard.getMiddleName();
setStatusText(qianming);
// 获取结束