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

📄 consolepanel.java

📁 JBother是纯Java开发的Jabber(即时消息开源软件)客户端。支持群组聊天
💻 JAVA
字号:
/* Copyright (C) 2003 Adam Olsen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */package com.valhalla.jbother;import java.awt.*;import java.awt.event.*;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.util.Date;import java.util.Locale;import java.util.ResourceBundle;import javax.swing.*;import javax.swing.event.*;import com.valhalla.gui.CopyPasteContextMenu;import com.valhalla.gui.MJTextArea;import com.valhalla.gui.Standard;import com.valhalla.jbother.jabber.BuddyStatus;import com.valhalla.jbother.jabber.smack.Blank;import com.valhalla.jbother.menus.ConversationPopupMenu;import com.valhalla.settings.Settings;/** * Handles XML packet exchange between client and server. * * @author Andrey Zakirov * @created March 2, 2005 * @version 0.1 */public class ConsolePanel extends ConversationPanel {    private ResourceBundle resources = ResourceBundle.getBundle(            "JBotherBundle", Locale.getDefault());    private JSplitPane container;    private JPanel buttonPanel = new JPanel();    private JPanel scrollPanel = new JPanel(new GridLayout(1, 0));    private boolean divSetUp = false;    private ConversationPopupMenu popMenu = new ConversationPopupMenu(this,            conversationArea);    private DividerListener dividerListener = new DividerListener();    private static ConsolePanel instance = null;    /**     * Sets up the ConsolePanel - creates all visual components and adds event     * listeners     *     * @param buddy     *            the buddy to associate with     */    private ConsolePanel(BuddyStatus buddy) {        super(buddy);        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));        textEntryArea.setLineWrap(true);        textEntryArea.setWrapStyleWord(true);        scrollPanel.add(conversationArea);        container = new JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPanel,                new JScrollPane(textEntryArea));        container.setResizeWeight(1);        JPanel containerPanel = new JPanel();        containerPanel                .setLayout(new BoxLayout(containerPanel, BoxLayout.X_AXIS));        containerPanel.add(container);        conversationArea.getTextPane().addMouseListener(new RightClickListener(popMenu));        conversationArea.setEmoticons(false);        CopyPasteContextMenu.registerComponent(conversationArea.getTextPane());        popMenu.disableBlock();        add(containerPanel);        textEntryArea.grabFocus();        addListeners();    }    /**     * Destroys the dialog, disposes the containing frame if there is one and     * removes the panel from the TabFrame if required.     */    public void closeHandler() {        closeLog();        if (frame != null) {            frame.setVisible(false);            frame.dispose();        }        if (buddy != null) {            com.valhalla.Logger.debug("Closing ConversationPanel for "                    + buddy.getUser());            buddy.setConversation(null);        }        if (Settings.getInstance().getBoolean("useTabbedWindow")) {            BuddyList.getInstance().removeTabPanel(this);        }        MessageDelegator.getInstance().removePanel(this);        instance = null;    }    public static ConsolePanel getInstance(BuddyStatus buddy)    {        if( instance == null ) instance = new ConsolePanel(buddy);        return instance;    }    public static ConsolePanel getInstance()    {        return instance;    }    private String getMessageTemplate() {        return "<message id=\"\" to=\"\" type=\"\"><body></body></message>";    }    /**     * @return the input area of this panel     */    public JComponent getInputComponent() {        return textEntryArea;    }    /**     * Sets up the Divider     */    public void setUpDivider() {        String modifier = "";        if (Settings.getInstance().getBoolean("useTabbedWindow")) {            modifier = "tabbed_";        }        String stringHeight = Settings.getInstance().getProperty(                modifier + "XMLconversationWindowHeight", "100");        // set up the divider location from settings        String divLocString = Settings.getInstance().getProperty(                modifier + "XMLconversationWindowDividerLocation", "50");        int divLoc = 50;        //com.valhalla.Logger.debug( "divlocstring is " + divLocString );        try {            if (divLocString != null) {                divLoc = Integer.parseInt(divLocString);            } else {                Settings                        .getInstance()                        .setProperty(                        modifier                        + "XMLconversationWindowDividerLocation",                        "30");            }        } catch (NumberFormatException ex) {            com.valhalla.Logger.logException( ex );        }        //com.valhalla.Logger.debug( "getting divider to " + divLoc );        container.setDividerLocation(divLoc);        if (!divSetUp) {            container.addPropertyChangeListener("lastDividerLocation",                    dividerListener);            divSetUp = true;        }    }    /**     * Listens for the user to move the divider, and saves it's location     *     * @author Adam Olsen     * @version 1.0     */    private class DividerListener implements PropertyChangeListener {        public void propertyChange(PropertyChangeEvent e) {            String modifier = "";            if (Settings.getInstance().getBoolean("useTabbedWindow")) {                modifier = "tabbed_";            }            if (e.getOldValue().toString().equals("-1")) {                return;            }            //com.valhalla.Logger.debug( "Setting divider to " + e.getOldValue() );            Settings.getInstance().setProperty(                    modifier + "XMLconversationWindowDividerLocation",                    e.getOldValue().toString());        }    }    public void removeDividerListener() {        container.removePropertyChangeListener(dividerListener);    }    /**     * @return the ConsolePanel's JSPlitPane     */    public JSplitPane getSplitPane() {        return container;    }    /**     * Adds the various event listeners for the components that are a part of     * this frame     */    private void addListeners() {        //if the press enter, send the message        Action sendMessageAction = new AbstractAction() {            public void actionPerformed(ActionEvent e) {                sendHandler();            }        };        Action shiftEnterAction = new AbstractAction() {            public void actionPerformed(ActionEvent e) {                int pos = textEntryArea.getCaretPosition();                if (pos < 0) {                    pos = 0;                }                textEntryArea.setText(textEntryArea.getText() + "\n");                try {                    textEntryArea.setCaretPosition(pos + 1);                } catch (IllegalArgumentException ex) {                }            }        };        Action checkCloseAction = new AbstractAction() {            public void actionPerformed(ActionEvent e) {                closeHandler();            }        };        Action closeAction = new AbstractAction() {            public void actionPerformed(ActionEvent e) {                closeHandler();            }        };         //set it up so that if there isn't any selected text in the        // conversation area        //the textentryarea grabs the focus.        conversationArea.getTextPane().addMouseListener(new MouseAdapter() {            public void mouseReleased(MouseEvent e) {                if (conversationArea.getSelectedText() == null) {                    textEntryArea.requestFocus();                }            }        });        textEntryArea.getInputMap()        .put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),                sendMessageAction);        textEntryArea.getInputMap()        .put(                KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,                java.awt.event.InputEvent.SHIFT_MASK),                shiftEnterAction);        textEntryArea.getInputMap().put(                KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Toolkit                .getDefaultToolkit().getMenuShortcutKeyMask()),                shiftEnterAction);        textEntryArea.getInputMap().put(                KeyStroke.getKeyStroke(KeyEvent.VK_W, Toolkit                .getDefaultToolkit().getMenuShortcutKeyMask()),                checkCloseAction);        textEntryArea.getInputMap().put(                KeyStroke.getKeyStroke(KeyEvent.VK_K, Toolkit                .getDefaultToolkit().getMenuShortcutKeyMask()),                closeAction);    }    public String getPanelName() {        return resources.getString("xmlConsole");    }    /**     * Recieves a message     *     * @param sbj     *            Description of the Parameter     * @param message     *            Description of the Parameter     * @param resource     *            Description of the Parameter     * @param date     *            Description of the Parameter     */    public void append(final String message, boolean to) {        final Color color;        if(!to) color = ConversationArea.SENDER;        else color = ConversationArea.RECEIVER;        SwingUtilities.invokeLater(new Runnable() {            public void run() {                conversationArea.append(message + "\n\n", color );            }        });    }    /**     * Sends the message in the TextEntryArea     */    private void sendHandler() {        if (!textEntryArea.getText().equals("")) {            if (!BuddyList.getInstance().checkConnection()) {                BuddyList.getInstance().connectionError();                return;            }            sendBuddyMessage(textEntryArea.getText());            textEntryArea.setText("");            //com.valhalla.jbother.sound.SoundPlayer.play( "sentSound" );        }    }    /**     * Sends the message     *     * @param text     *            the message to send     */    public void sendBuddyMessage(String text) {        Blank message = new Blank(text);        if (BuddyList.getInstance().checkConnection()) {            BuddyList.getInstance().getConnection().sendPacket(message);        } else {            BuddyList.getInstance().connectionError();        }    }    /**     * Creates the containing frame     */    public void createFrame() {        frame = new JFrame();        frame.setContentPane(this);        frame.pack();        frame.setIconImage(Standard.getImage("frameicon.png"));        frame.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {                closeHandler();            }        });        frame.setTitle(resources.getString("xmlConsole"));        frame.pack();        String stringWidth = Settings.getInstance().getProperty(                "XMLconversationWindowWidth");        String stringHeight = Settings.getInstance().getProperty(                "XMLconversationWindowHeight");        if (stringWidth == null) {            stringWidth = "400";        }        if (stringHeight == null) {            stringHeight = "340";        }        frame.setSize(new Dimension(Integer.parseInt(stringWidth), Integer                .parseInt(stringHeight)));        // add a resize window listener        frame.addComponentListener(new ComponentAdapter() {            public void componentResized(ComponentEvent e) {                Dimension dim = frame.getSize();                Settings.getInstance().setProperty(                        "XMLconversationWindowWidth",                        new Integer((int) dim.getWidth()).toString());                Settings.getInstance().setProperty(                        "XMLconversationWindowHeight",                        new Integer((int) dim.getHeight()).toString());            }        });        Standard.cascadePlacement(frame);        setUpDivider();        frame.setVisible(true);    }    /**     * Description of the Method     */    public void checkCloseHandler() {        closeHandler();    }}

⌨️ 快捷键说明

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