spark部分代码分析,修改笔记
xilong008
11年前
org.jivesoftware.resource 图片声音资料路径
1.修改字体:各个界面类中改11为12 org.jivesoftware--Spark.java--installBaseUIProperties()--setApplicationFont(new Font("Dialog", Font.PLAIN, 12));
2.聊天窗口加“发送”按钮:
org.jivesoftware.spark.ui--ChatRoom.java--ChatRoom()中加入如下代码:
button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
sendMessage();
getChatInputEditor().setText("");
getChatInputEditor().setCaretPosition(0);
}
});
button.setBorder(new EmptyBorder(0,0,0,0));
button.setText("发送");
button.setBounds(115, 181, 106, 28);
找到init()方法,加入:
bottomPanel.add(button, new GridBagConstraints(4, 5, 1, 1, 0.0, 0.0, GridBagConstraints.EAST,
GridBagConstraints.NONE, new Insets(0,0,5,10), 0, 0));
3.登录界面修改
设置个人头像位置路径
/spark/src/java/org/jivesoftware/sparkimpl/profile/AvatarPanel.java
/spark/src/java/org/jivesoftware/spark/ui/status/StatusBar.java
imageLabel.setIcon(Default.getImageIcon(Default.MAIN_IMAGE)); //584行,修改主界面个人头像为默认。
登陆界面上部背景
LoginDialog.java
private final ImageIcon icons = Default.getImageIcon(Default.MAIN_IMAGE);
/spark/src/java/org/jivesoftware/resource/default.properties
default.properties--MAIN_IMAGE = images/spark.gif //个人头像修改
/spark/src/java/org/jivesoftware/spark/ui/status/StatusBar.java 536-596行
mainPanel.add(imagePanel,
new GridBagConstraints(0,0, 1, 1, 1.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(40,0,40,0),24,24)); //登陆界面设置头像大小为24x24,居中
mainPanel.add(loginPanel,
new GridBagConstraints(0, 2, 2, 1,
1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 0), 0,100)); //设置登陆框大小
//登陆界面加入状态下拉列表
/spark/src/resources/i18n/spark_i18n_zh_CN.properties
status.online=在线 status.pending=挂起 status.on.phone=电话中
org.jivesoftware.spark.ui.status //状态栏包
4.个人信息
4.1
/spark/src/resources/i18n/spark_i18n_zh_CN.properties tab.avatar 个性头像
menuitem.edit.my.profile=编辑我的简介 ...
menuitem.lookup.profile=查看简介 ...
/spark/src/java/org/jivesoftware/sparkimpl/profile/VCardEditor.java 个人资料编辑对话框
/spark/src/java/org/jivesoftware/sparkimpl/profile/PersonalPanel.java 修改“个人资料”编辑对话框布局
JLabel firstNameLabel = new JLabel();
firstNameField = new JTextField();
ResourceUtils.resLabel(firstNameLabel, firstNameField, Res.getString("label.first.name") + ":");
add(firstNameLabel, new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
add(firstNameField, new GridBagConstraints(3, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
/spark/src/java/org/jivesoftware/sparkimpl/profile/VCardEditor.java 修改“编辑我的简介”对话框布局
label.job.title=(&J) 职务
修改对输入内容持久化
/spark/src/java/org/jivesoftware/sparkimpl/profile/VCardEditor.java
private void fillUI(VCard vcard){
personalPanel.setFirstName(vcard.getFirstName());
personalPanel.setMiddleName(vcard.getMiddleName());
。。。}
private void saveVCard() {
final VCard vcard = new VCard();
// Save personal info
vcard.setFirstName(personalPanel.getFirstName());
vcard.setLastName(personalPanel.getLastName());
。。。}
4.2加个性签名
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);
5.设置面板。
样式面板
/spark/src/java/org/jivesoftware/spark/ui/themes/ThemePanel.java
add(emoticonCheckBox, new GridBagConstraints(0, 2, 3, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); //342行,改布局位置
6.个人简介小窗口
/spark/src/java/org/jivesoftware/spark/ui/VCardViewer.java
204行:修改Email信息 final JLabel emailTimeLabel = new JLabel(Res.getString("label.email.address").replace("&", "") + ": ");
add(emailTimeLabel, new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 7, 2, 0), 0, 0));
add(emailTime, new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(-3,81, 2, 0), 0, 0));
230-258行:修改 部门、职务、电话、手机
7.查找搜索
/spark/src/java/org/jivesoftware/sparkimpl/search/users/SearchForm.java
311行:职务信息
8.主界面
/spark/src/java/org/jivesoftware/spark/ui/ContactInfoWindow.java
9.个人信息悬浮窗口
/spark/src/java/org/jivesoftware/spark/ui/ContactInfoWindow.java
添加邮箱信息:
417行:
emailAddress = vcard.getEmailHome();
if (!ModelUtil.hasLength(emailAddress)) {
emailAddress = Res.getString("label.na");
}
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>";
emailTime.setText(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) {
setCursor(DEFAULT_CURSOR);
}
});
150行:
JLabel emailtext=new JLabel();
emailtext.setText(Res.getString("label.email.address")+":");
add(emailtext,new GridBagConstraints(0, 7, 4, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0,5, 2, 2), 0, 0));
add(emailTime, new GridBagConstraints(0,7,4, 1, 1.5, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(-2,60, 2, 2), 0, 0));
emailtext.setFont(new Font("Dialog", Font.PLAIN, 12));
emailtext.setForeground(Color.gray);
460行:
设置窗体大小
size.width = 300;
size.height = 190;
10.主界面联系人列表
/spark/src/java/org/jivesoftware/spark/ui/ContactItem.java
需要修改显示联系人姓名(现在显示的是id)
资料卡中 nickname=生日,nickname可以取到,但在主窗口中取不到
11.搜索框
org.jivesoftware.spark.search/searchservice.java
93.97行,去掉锁子图标
//add(lockLabel, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 0, 5, 15), 0, 0));
12."登陆设置"界面
/spark/src/java/org/jivesoftware/sparkimpl/settings/local/LocalPreferencePanel.java
/spark/src/java/org/jivesoftware/sparkimpl/settings/local/LocalPreference.java