openfire-Spark二次开发——修改设置窗口
来源:互联网 发布:手机版淘宝客服在哪里 编辑:程序博客网 时间:2024/06/06 08:23
spark开发了几周了,该总结一下了。
今天说说修改设置界面的窗口。
这是spark的设置界面。
里面有很多项设置,但是也有许多内容暂时不需要的比如ROAR,显示样式中的主题,因为我已经辛辛苦苦的套上了新主题,如果再变换主题就没意思了。暂时先阉了。
这个窗口的具体实现类
org.jivesoftware.sparkimpl.preference.PreferenceDialog//设置窗口的类
上面的类中有如下属性
private JDialog preferenceDialog; private JOptionPane pane = null; private PreferencesPanel prefPanel;//这是左边那些面板列表的定义
进入PreferencePanel中后发现构造函数声明如下
public PreferencesPanel(Iterator<Preference> preferences) { this.setLayout(new GridBagLayout()); titleLabel.setText(Res.getString("title.preferences")); titleLabel.setFont(new Font("Dialog", Font.BOLD, 15)); scrollPane = new JScrollPane(list); scrollPane.setPreferredSize(new Dimension(125, 0)); scrollPane.setMinimumSize(new Dimension(125,100)); list.setFixedCellHeight(50); add(scrollPane, new GridBagConstraints(0, 0, 1, 1, 0.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.VERTICAL, new Insets(5, 5, 5, 5), 50, 0)); add(flowPanel, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0)); list.setCellRenderer(new JLabelIconRenderer()); list.addListSelectionListener(this); // Populate with current preferences while (preferences.hasNext()) { Preference preference = preferences.next(); listModel.addElement(new PreferenceUI(preference)); } list.setSelectedIndex(0); }
不难发现Iterator<Preference>
就是左边的各种组件。选中Preference按下ctrl+T查看他的实现树。
这个基本是我们想看到的。先干掉一个Privacy Plugin压压惊。
但是问题来了。如果是修改插件里面的内容则在上图中的类中找到相应插件修改。如果直接不加载这个插件。那么肯定要在启动的时候去除加载这个插件。
主面板点击设置后会弹出总的设置对话框。
首先主面板类
/spark/src/java/org/jivesoftware/MainWindow.java//其中的build方法private void buildMenu() { // setup file menu final JMenuItem exitMenuItem = new JMenuItem(); // Setup ResourceUtils ResourceUtils.resButton(connectMenu, "&" + Default.getString(Default.APPLICATION_NAME)); ResourceUtils.resButton(contactsMenu, Res.getString("menuitem.contacts")); ResourceUtils.resButton(actionsMenu, Res.getString("menuitem.actions")); ResourceUtils.resButton(exitMenuItem, Res.getString("menuitem.exit")); ResourceUtils.resButton(pluginsMenu, Res.getString("menuitem.plugins")); exitMenuItem.setIcon(null); mainWindowBar.add(connectMenu); mainWindowBar.add(contactsMenu); mainWindowBar.add(actionsMenu); //mainWindowBar.add(pluginsMenu); mainWindowBar.add(helpMenu); preferenceMenuItem = new JMenuItem(SparkRes.getImageIcon(SparkRes.PREFERENCES_IMAGE)); preferenceMenuItem.setText(Res.getString("title.spark.preferences")); preferenceMenuItem.addActionListener(this); //添加的点击响应事件 connectMenu.add(preferenceMenuItem);//这就是设置按钮, alwaysOnTopItem = new JCheckBoxMenuItem();//面板总在最前面按钮 ResourceUtils.resButton(alwaysOnTopItem, Res.getString("menuitem.always.on.top")); alwaysOnTopItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { if (alwaysOnTopItem.isSelected()) { SettingsManager.getLocalPreferences().setMainWindowAlwaysOnTop(true); MainWindow.getInstance().setAlwaysOnTop(true); } else { SettingsManager.getLocalPreferences().setMainWindowAlwaysOnTop(false); MainWindow.getInstance().setAlwaysOnTop(false); } } }); if (SettingsManager.getLocalPreferences().isMainWindowAlwaysOnTop()) { alwaysOnTopItem.setSelected(true); this.setAlwaysOnTop(true); } connectMenu.add(alwaysOnTopItem); if(!Default.getBoolean("DISABLE_EXIT")) connectMenu.addSeparator(); //EventQueue.invokeLater(new Runnable() { // public void run() { JMenuItem logoutMenuItem = new JMenuItem(); //登出按钮 ResourceUtils.resButton(logoutMenuItem, Res.getString("menuitem.logout.no.status")); logoutMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { logout(false); } }); JMenuItem logoutWithStatus = new JMenuItem(); //登出记录理由按钮 ResourceUtils.resButton(logoutWithStatus, Res.getString("menuitem.logout.with.status")); logoutWithStatus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { logout(true); } }); if ((Spark.isWindows() || Spark.isLinux()) || Spark.isMac() && !Default.getBoolean("DISABLE_EXIT")) { connectMenu.add(logoutMenuItem); connectMenu.add(logoutWithStatus); connectMenu.addSeparator(); } if (!Default.getBoolean("DISABLE_EXIT")) { connectMenu.add(exitMenuItem); } JMenuItem updateMenu= new JMenuItem("", SparkRes.getImageIcon(SparkRes.DOWNLOAD_16x16)); ResourceUtils.resButton(updateMenu, Res.getString("menuitem.check.for.updates")); updateMenu.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { checkForUpdates(true); } });
在PreferencesPanel的构造中加载了一个设置集合。只要找到这个集合,去掉相应的内容即可。根据spark的命名规则,感觉我们应该找类似PreferenceManager之类的东西、
就在
public PreferencesPanel(Iterator<Preference> preferences)//点击Preference,发现与他同级的目录下就有个PreferenceManager。果然如此。//在PreferenceManager的构造方法中发现如下 PrivacyPreferences privacy = new PrivacyPreferences(); addPreference(privacy); //把这个直接注释了。 privacy.load();
运行spark。
已经没有了Privacy Plugin
1 0
- openfire-Spark二次开发——修改设置窗口
- openfire-Spark二次开发——修改设置窗口
- openfire-Spark二次开发——修改设置窗口(二)其他的小细节
- openfire-spark二次开发——增加发送按钮
- openfire-spark二次开发——解析自定义的消息
- spark+openfire二次开发
- openfire+spark二次开发
- spark+openfire二次开发(二)
- Spark+Openfire二次开发Message类型汇总
- 基于openfire和spark的二次开发。
- openfire-spark 二次开发-(一)源码配置
- openfire+spark二次开发,聊天记录显示效果界面
- openfire-spark 二次开发-(二)运行环境配置
- openfire-spark 二次开发-(三)源码系统总览-1
- openfire-spark 二次开发-(三)源码系统总览-2
- openfire-spark 二次开发-(三)源码系统总览-3
- 基于openfire+asmack+spark修改的即时通讯
- XMPP——(3)openfire和Spark
- 使用Unity的50个建议
- jQuery.form.js插件回调函数失效的解决办法
- Zend Studio技巧大全:[1]Zend Studio快捷键
- 数据流程图与程序/系统结构图等的解释与说明
- 如何在Android中为TextView动态设置drawableLeft等
- openfire-Spark二次开发——修改设置窗口
- VirtualBox官网下载及安装教程
- Mysql 存储过程查询结果赋值到变量的方法
- 自定义onTouchEvent之ACTION_MOVE不响应
- 程序日志--ios“页面控制”程序
- servlet 处理过程
- 二叉查找树 BST
- 数据库
- 站长应该如何挖掘长尾关键词