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

📄 chatview.java

📁 ICE3.3.0--聊天程序服务器端demo
💻 JAVA
字号:
// **********************************************************************//// Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.//// This copy of Chat Demo is licensed to you under the terms// described in the CHAT_DEMO_LICENSE file included in this// distribution.//// **********************************************************************package ChatDemoGUI;import java.awt.Component;import java.awt.event.ComponentListener;import java.awt.event.ComponentEvent;import java.awt.BorderLayout;import java.awt.event.KeyListener;import java.awt.event.KeyEvent;import java.awt.Dimension;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing.JPanel;import javax.swing.JList;import javax.swing.JPopupMenu;import javax.swing.DefaultListCellRenderer;import javax.swing.JLabel;import javax.swing.JSplitPane;import javax.swing.JTextArea;import javax.swing.JScrollPane;import javax.swing.JScrollBar;import javax.swing.DefaultListModel;import javax.swing.text.Document;import javax.swing.text.Element;import javax.swing.text.AttributeSet;import javax.swing.text.BadLocationException;import javax.swing.text.DefaultEditorKit;import java.util.prefs.Preferences;import java.util.prefs.BackingStoreException;public class ChatView extends JPanel{    ChatView(Preferences prefs, DefaultListModel users)    {        _prefs = prefs;        setLayout(new BorderLayout());        // Build the user list.        _userList = new JList();        _userList.setCellRenderer(new UserListCellRender());        _userList.setModel(users);        // Build the JTextArea that shows the chat conversation.        _conversationText = new JTextArea("");        _conversationText.setLineWrap(true);        _conversationText.setEditable(false);        final JPopupMenu textMenu = new JPopupMenu();        textMenu.add(new DefaultEditorKit.CopyAction());        textMenu.pack();        _conversationText.addMouseListener(new MouseAdapter()            {                public void mousePressed(MouseEvent e)                {                    if (e.isPopupTrigger()) // BUTTON3 is the right mouse button                    {                        textMenu.show(_conversationText, e.getX(), e.getY());                    }                }            });        // Build the JTextArea where the user writes input messages.        _conversationInput = new JTextArea("");        _conversationInput.setLineWrap(true);        _conversationInput.setEditable(true);        _conversationInput.addKeyListener(new InputLineKeyListener());        // Build the split panes.        _horizontalSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);        JScrollPane usersScroll = ChatDemoGUIFactory.createStrippedScrollPane(_userList);        usersScroll.setMinimumSize(new Dimension(100, 100));        _horizontalSplit.setLeftComponent(usersScroll);        _conversationTextScroll = ChatDemoGUIFactory.createStrippedScrollPane(_conversationText);        _conversationTextScroll.setMinimumSize(new Dimension(100, 100));        _conversationTextScroll.setPreferredSize(new Dimension(100, 100));        _horizontalSplit.setRightComponent(_conversationTextScroll);        _verticalSplit = new JSplitPane(JSplitPane.VERTICAL_SPLIT);        _verticalSplit.setTopComponent(_horizontalSplit);        JScrollPane conversationInputScroll = ChatDemoGUIFactory.createStrippedScrollPane(_conversationInput);        conversationInputScroll.setMinimumSize(new Dimension(100, 100));        conversationInputScroll.setPreferredSize(new Dimension(100, 100));        _verticalSplit.setBottomComponent(conversationInputScroll);        _horizontalSplit.setResizeWeight(0.1);        _verticalSplit.setResizeWeight(0.9);        _conversationText.addComponentListener(new ComponentListener()            {                public void componentResized(ComponentEvent e)                {                    JScrollBar vertivalScrollbar = _conversationTextScroll.getVerticalScrollBar();                    vertivalScrollbar.setValue(vertivalScrollbar.getMaximum());                }                public void  componentHidden(ComponentEvent e)                {                }                public void  componentMoved(ComponentEvent e)                {                }                public void  componentShown(ComponentEvent e)                {                }            });        add(_verticalSplit, BorderLayout.CENTER);    }    public void setCoordinator(Coordinator coordinator)    {        _coordinator = coordinator;    }    public void appendMessage(String message)    {        Document doc = (Document) _conversationText.getDocument();        Element e = doc.getDefaultRootElement();        AttributeSet attr = e.getAttributes().copyAttributes();        try        {            doc.insertString(doc.getLength(), message + "\n", attr);        }        catch(BadLocationException ex)        {        }        _conversationText.setCaretPosition(doc.getLength());    }    public void appendError(String error)    {        appendMessage(error);        _conversationInput.setEditable(false);    }    class UserListCellRender extends DefaultListCellRenderer    {        public Component        getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean hasFocus)        {            JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, hasFocus);            label.setIcon(MainView.getIcon("/icons/16x16/user.png"));            return label;        }    }    //    // Event handler for input messages.    //    class InputLineKeyListener implements KeyListener    {        public void keyTyped(KeyEvent e)        {            if(e.getKeyChar() == KeyEvent.VK_ENTER)            {                try                {                    Document doc = _conversationInput.getDocument();                    String msg = doc.getText(0, doc.getLength()).trim();                    if(msg.length() > 0)                    {                        _coordinator.sendMessage(msg);                    }                }                catch(BadLocationException ex)                {                }                _conversationInput.setText("");            }        }        public void keyPressed(KeyEvent e)        {        }        public void keyReleased(KeyEvent e)        {        }    }    public void storeWindowPrefs()    {        Preferences windowPrefs = _prefs.node("ChatView");        windowPrefs.putInt("hSplitLocation", _horizontalSplit.getDividerLocation());        windowPrefs.putInt("vSplitLocation", _verticalSplit.getDividerLocation());    }    public boolean loadWindowPrefs()    {        try        {            if(!_prefs.nodeExists("ChatView"))            {                return false;            }        }        catch(BackingStoreException ex)        {            return false;        }        Preferences windowPrefs = _prefs.node("ChatView");        _horizontalSplit.setDividerLocation(windowPrefs.getInt("hSplitLocation", 120));        _verticalSplit.setDividerLocation(windowPrefs.getInt("vSplitLocation", 50));        return true;    }    public void setConnected(boolean connected)    {        setVisible(connected);        if(connected)        {            loadWindowPrefs();            _conversationInput.setEditable(true);            if(!_conversationInput.hasFocus())            {                _conversationInput.requestFocus();            }        }        else        {            storeWindowPrefs();            _conversationText.setText("");            _conversationInput.setText("");        }    }    private final JList _userList;    private final JScrollPane _conversationTextScroll;    private final JTextArea _conversationText;    private final JTextArea _conversationInput;    private final JSplitPane _verticalSplit;    private final JSplitPane _horizontalSplit;    private Coordinator _coordinator;    private final Preferences _prefs;};

⌨️ 快捷键说明

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