⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 userchooser.java

📁 JBother是纯Java开发的Jabber(即时消息开源软件)客户端。支持群组聊天
💻 JAVA
字号:
/* * UserChooser.java * * Created on October 28, 2005, 7:27 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */package com.valhalla.jbother;import javax.swing.*;import javax.swing.table.*;import javax.swing.event.*;import java.awt.*;import java.awt.event.*;import java.util.*;import org.jivesoftware.smack.*;import org.jivesoftware.smackx.*;import com.valhalla.jbother.jabber.*;/** * * @author synic */public class UserChooser extends JDialog {    protected ResourceBundle resources = ResourceBundle.getBundle("JBotherBundle", Locale.getDefault());        JPanel main;    JButton ok = new JButton(resources.getString("okButton"));    JButton cancel = new JButton(resources.getString("cancelButton"));    JButton check = new JButton(resources.getString("checkAll"));    ArrayList items = new ArrayList();        UserModel model = new UserModel();    JTable table = new JTable(model);    ArrayList listeners = new ArrayList();    JScrollPane scroll = new JScrollPane(table);        /** Creates a new instance of UserChooser */    public UserChooser(JFrame parent, String title, String instructions, boolean all) {        super(parent, title);                model.setTable();                JLabel label = new JLabel(instructions);        label.setAlignmentX(Container.CENTER_ALIGNMENT);        label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));                main = (JPanel)getContentPane();        main.setLayout(new BorderLayout());        main.add(label, BorderLayout.NORTH);        main.setBorder(BorderFactory.createTitledBorder(title));                updateUsers(all);                scroll.getViewport().setBackground(Color.WHITE);        main.add(scroll, BorderLayout.CENTER);                JPanel buttons = new JPanel();        buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS));        buttons.add(check);        buttons.add(Box.createHorizontalGlue());        buttons.add(cancel);        buttons.add(ok);                buttons.setBorder(BorderFactory.createEmptyBorder(5, 0,0,0));        main.add(buttons, BorderLayout.SOUTH);                setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);                cancel.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                dispose();            }        } );                ok.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                okHandler();            }        } );                check.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                for(int i = 0; i < items.size(); i++)                {                    Item item = (Item)items.get(i);                    item.setState(!item.getState());                }                                table.repaint();            }        } );                pack();        setSize(500, 450);        setLocationRelativeTo(parent);           }        public UserChooser(JFrame parent, String title)    {        this(parent, title, "", false);    }    public void setEditChooser(boolean edit)     {        model.setEditChooser(edit);        table = new JTable(model);        scroll.setViewportView(table);        model.setTable();    }            public void addListener(UserChooserListener l)    {        listeners.add(l);    }        public void clearEntries()    {        items.clear();    }    public void addEntries(Iterator entries)    {        while(entries.hasNext())        {            RemoteRosterEntry entry = (RemoteRosterEntry)entries.next();            Item item = new Item(entry.getName(), entry.getUser(), false);                        String group = null;            Iterator i = entry.getGroupNames();            while(i.hasNext())            {                group = (String)i.next();                break;            }                        item.setGroup(group);            items.add(item);                    }                model.update();    }        private void okHandler()    {        setVisible(false);        ArrayList list = new ArrayList();        int count = 0;        for( int i = 0; i < items.size(); i++)        {            Item item = (Item)items.get(i);            if(item.getState())             {                list.add(item);                count++;            }        }                Item[] array = (Item[])list.toArray(new Item[count]);                for( int i = 0; i < listeners.size(); i++)        {            UserChooserListener listener = (UserChooserListener)listeners.get(i);            listener.usersChosen(array);        }                dispose();    }        private void updateUsers(boolean all)    {        Roster roster = BuddyList.getInstance().getConnection().getRoster();        Iterator i = roster.getEntries();                while(i.hasNext())        {            RosterEntry entry = (RosterEntry)i.next();            BuddyStatus buddy = BuddyList.getInstance().getBuddyStatus(entry.getUser());                        if(buddy.size() > 0 || all)            {                items.add(new Item(buddy.getName(), buddy.getUser(), false));            }        }                Item[] array = (Item[])items.toArray(new Item[items.size()]);        Arrays.sort(array, new Comparator()        {            public int compare(Object o1, Object o2)            {                Item item1 = (Item)o1;                Item item2 = (Item)o2;                                return item1.getName().compareTo(item2.getName());            }        });                items = new ArrayList();        for( int ii = 0; ii < array.length; ii++)        {            items.add(array[ii]);        }    }        class UserModel extends AbstractTableModel    {            private boolean editChooser = false;        public void setEditChooser(boolean edit)         {             editChooser = edit;         }                public void update()        {            fireTableChanged(new TableModelEvent(this));        }                public void setTable()        {            int width = 400;            JComboBox comboBox = null;            if( editChooser )             {                width = 300;                                ArrayList groups = new ArrayList();                groups.add("None");                Roster roster = BuddyList.getInstance().getConnection().getRoster();                Iterator i = roster.getGroups();                                while(i.hasNext())                {                    RosterGroup group = (RosterGroup)i.next();                    groups.add(group.getName());                }                comboBox = new JComboBox(groups.toArray(new String[groups.size()]));                comboBox.setEditable(true);            }                                   // set the default column widths            for (int i = 0; i < getColumnCount(); i++) {                TableColumn column = table.getColumnModel().getColumn(i);                if (i == 0) {                    column.setPreferredWidth(20);                } else if (i == 1)                {                    column.setPreferredWidth(80);                }                else if( i == 2 )                {                    column.setPreferredWidth(width);                }                else if( i == 3 )                {                    column.setPreferredWidth(100);                    column.setCellEditor(new DefaultCellEditor(comboBox));                }                                }        }                public Class getColumnClass( int index )        {            if(index == 0) return Boolean.class;            else return String.class;        }                public String getColumnName( int index )        {            switch(index)            {                case 0:                    return " ";                case 1:                     return "Nick";                case 2:                    return "JID";                case 3:                    return "Group";                default:                    return " ";                                        }        }                public int getColumnCount()         {              if(editChooser) return 4;            return 3;         }        public int getRowCount() { return items.size(); }        public Object getValueAt(int row, int column)        {            Item item = (Item)items.get(row);                        if(column == 0) return new Boolean(item.getState());            else if(column == 1) return item.getName();            else if(column == 2) return item.getJID();            else return item.getGroup();        }                public boolean isCellEditable(int row, int column) {                        if(editChooser && ( column == 1 || column == 3 )) return true;                        if (column == 0)                return true;            else                return false;        }                public void setValueAt(Object value, int row, int col) {                        Item item = (Item)items.get(row);                        if(col == 0)            {                boolean b = ((Boolean) value).booleanValue();                item.setState(b);            }            else if(col == 1)            {                item.setName((String)value);            }                        else if( col == 3 )            {                String group = (String)value;                item.setGroup(group);            }            fireTableCellUpdated(row, col);        }    }        public static class Item    {        String name;        String jid;        boolean state;        String group = "None";        public Item(String name, String jid, boolean state)        {            this.name = name;            this.jid = jid;            this.state = state;        }                public boolean getState() { return state; }        public String getName() { return name; }        public String getJID() { return jid; }        public String getGroup() { return group; }                public void setState(boolean s) { state = s; }        public void setName(String name) { this.name = name; }        public void setGroup(String group)         {             if(group == null) group = "None";            this.group = group;         }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -