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
原创粉丝点击