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

📄 chatroompanel.java

📁 JBother是纯Java开发的Jabber(即时消息开源软件)客户端。支持群组聊天
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
    public void serverErrorMessage(String message) {        conversationArea.append(getDate(null));        conversationArea.append(" -> " + message + "\n", ConversationArea.SENDER);    }    /**     * Receives a message     *     * @param from     *            who it's from     * @param message     *            the message     */    public void receiveMessage(String from, String message,            Date date) {        String curNick = nickname;        if( chat != null && chat.getNickname() != null) curNick = chat.getNickname();        if (from.equals("")                || from.toLowerCase().equals(chat.getRoom().toLowerCase())) {            //server message            serverNoticeMessage(message);            return;        } else {            boolean highLightedSound = false;            if (message.startsWith("/me ")) {                message = message.replaceAll("^\\/me ", "");                conversationArea.append(getDate(date));                conversationArea.append(" *" + from+ " ", ConversationArea.SENDER, true);                conversationArea.append(message + "\n", ConversationArea.BLACK);            } else if (message.toLowerCase().replaceAll("<[^>]*>", "").matches(                    ".*(^|\\W)" + curNick.toLowerCase() + "\\W.*") &&                    !from.toLowerCase().equals(curNick.toLowerCase())) {                TabbedPanel tabPane = BuddyList.getInstance().getTabFrame()                        .getTabPane();                if (tabPane.getSelectedTab().getContentComponent() != this)                    messageToMe = true;                conversationArea.append(getDate(date), Color.BLACK, false, ConversationArea.HL);                conversationArea.append(" " +from + ": ", ConversationArea.RECEIVER, true, ConversationArea.HL);                conversationArea.append(message + "\n", ConversationArea.BLACK, false, ConversationArea.HL);                com.valhalla.jbother.sound.SoundPlayer                        .play("groupHighlightedSound");                if (!BuddyList.getInstance().getTabFrame().isFocused()) {                    NotificationPopup.showSingleton(BuddyList.getInstance()                            .getTabFrame(), resources                            .getString("messageReceived"), "<b>"                            + resources.getString("from") + ":</b>&nbsp;&nbsp;"                            + from,this);                }                highLightedSound = true;            } else {                conversationArea.append(getDate(date));                conversationArea.append(" " + from +": ", ConversationArea.RECEIVER, true);                conversationArea.append(message + "\n", ConversationArea.BLACK);            }            if (!highLightedSound)            {                com.valhalla.jbother.sound.SoundPlayer                        .play("groupReceivedSound");                if( Settings.getInstance().getBoolean("usePopup") &&                    Settings.getInstance().getBoolean("popupForGroupMessage" ))                {                   NotificationPopup.showSingleton(BuddyList.getInstance().getTabFrame(), resources                            .getString("groupMessageReceived"), from,this);                }            }        }        // fire MUCEvent for message received        PluginChain.fireEvent(new MUCEvent(from,                MUCEvent.EVENT_MESSAGE_RECEIVED, message, date));        int tabCount = BuddyList.getInstance().getTabFrame().markTab(this);        try {            TabbedPanel tabPane = BuddyList.getInstance().getTabFrame()                    .getTabPane();            if (tabPane.getSelectedTab().getContentComponent() != this && messageToMe) {                String title = this.getShortRoomName() + " (" + tabCount + ")";                if (messageToMe)                    title = "*" + title;                tab.setText(title);            }        } catch (Exception ex) {        }    }    public void resetMessageToMe() {        messageToMe = false;    }    /**     * Closes the log file     */    public void closeLog() {        conversationArea.closeLog();    }    /**     * @return a String representing the current time the format:     *         [Hour:Minute:Second]     */    public String getDate(Date d) {        return ConversationPanel.getDate(d);    }    public MJTextField getSubjectField() {        return subjectField;    }    /**     * Sets the subject of the room     *     * @param subject     *            the subject to set     */    public void setSubject(String subject) {        this.subject = subject;        if (BuddyList.getInstance().getTabFrame() != null)            BuddyList.getInstance().getTabFrame().setSubject(this);        subjectField.setText(subject);        subjectField.setCaretPosition(0);        subjectField.setToolTipText(subject);    }    /**     * Returns the current room subject     *     * @return the current room subject     */    public String getSubject() {        return this.subject;    }    /**     * Gets all the buddy statuses in the room     *     * @return all BuddyStatuses     */    public Hashtable getBuddyStatuses() {        return this.buddyStatuses;    }    /**     * Sends the message currently in the textentryarea     */    private void sendHandler() {        String text = textEntryArea.getText();        Message message = chat.createMessage();        message.setBody(text);        if (!textEntryArea.getText().equals("")) {            try {                chat.sendMessage(message);            } catch (XMPPException e) {                com.valhalla.Logger.debug("Could not send message.");            } catch (IllegalStateException ex) {                serverErrorMessage(resources.getString("notConnected"));            }            textEntryArea.setText("");        }    }    /**     * Implementation of Tab nick completion in the textEntryArea     */    private void nickCompletionHandler() {        String text = textEntryArea.getText();        /* if we have nothing => do nothing */        if (!text.equals("")) {            int caretPosition = textEntryArea.getCaretPosition();            int startPosition = text.lastIndexOf(" ", caretPosition - 1) + 1;            String nickPart = text.substring(startPosition, caretPosition);            Vector matches = new Vector();            java.util.List keys = new ArrayList(buddyStatuses.keySet());            Iterator iterator = keys.iterator();            while (iterator.hasNext()) {                BuddyStatus buddy = (BuddyStatus) buddyStatuses.get(iterator                        .next());                if (!nickList.contains(buddy))                    continue;                try {                    String nick = buddy.getUser().substring(                            buddy.getUser().lastIndexOf("/") + 1);                    if (nick.toLowerCase().startsWith(nickPart.toLowerCase())) {                        matches.add(nick);                    }                } catch (java.lang.NullPointerException e) {                }            }            if (matches.size() > 0) {                String append = "";                if (matches.size() > 1) {                    String nickPartNew = (String) matches.firstElement();                    String nick = "";                    String hint = nickPartNew + ", ";                    int nickPartLen = nickPart.length();                    for (int i = 1; i < matches.size(); i++) {                        nick = (String) matches.get(i);                        hint += nick + ", ";                        for (int j = 1; j <= nick.length() - nickPartLen; j++) {                            if (!nickPartNew.regionMatches(true, nickPartLen,                                    nick, nickPartLen, j)) {                                nickPartNew = nickPartNew.substring(0,                                        nickPartLen + j - 1);                                break;                            }                        }                    }                    if (nickPart.length() != nickPartNew.length()) {                        nickPart = nickPartNew;                    }                    // emphasize differense in matches by bold and append hint                    // to the conversationArea                    // hint = hint.replaceAll() can't be used here because of                    // its case sensitive nature                    //Pattern pattern = Pattern.compile("(" + nickPart                    //        + ")([^,]+), ", Pattern.CASE_INSENSITIVE);                    //hint = pattern.matcher(hint).replaceAll("$1<b>$2</b>, ");                    conversationArea.append(hint.substring(0, hint.length() - 2) + "\n", ConversationArea.RECEIVER, true);                } else {                    nickPart = (String) matches.firstElement();                    if (startPosition == 0)                        append = ": ";                    else                        append = " ";                }                String newText = text.substring(0, startPosition);                newText += nickPart + append;                newText += text.substring(caretPosition);                textEntryArea.setText(newText);                /* Set caret to the appropriate position */                textEntryArea.setCaretPosition(startPosition                        + nickPart.length() + append.length());            }        } /* end of the lazy "if" */    }    /**     * Joins the chatroom and adds this chatroomwindow to the TabFrame     *     * @author Adam Olsen     * @version 1.0     */    class JoinChatThread extends Thread {        private String errorMessage;        private boolean cancelled = false;        public void cancel() {            interrupt();            cancelled = true;        }        public void run() {            chat.addMessageListener(messageListener);            chat.addParticipantListener(participantListener);            chat.addSubjectUpdatedListener(subjectListener);            chat.addParticipantStatusListener(statusListener);            chat.addUserStatusListener(userStatusListener);            chat.addInvitationRejectionListener(invitationRejectionPacketListener);            int errorCode = 0;            try {                chat.join(nickname, pass, new DiscussionHistory(),                        SmackConfiguration.getPacketReplyTimeout());            } catch (XMPPException e) {                if (!cancelled) {                    if (e.getXMPPError() == null)		    {                        errorMessage = e.getMessage();		    }                    else {                        errorMessage = resources.getString("xmppError"                                + e.getXMPPError().getCode());			errorCode = e.getXMPPError().getCode();		    }                }            }            final int tempError = errorCode;            if (!cancelled) {                SwingUtilities.invokeLater(new Runnable() {                    public void run() {                        if (errorMessage != null) {                            if(tempError == 409 && joins++ < 1 && !removed)                            {                                nickname += "_";                                leaveChat();                                ChatRoomPanel window = new ChatRoomPanel(chatroom, nickname, pass);                                BuddyList.getInstance().removeTabPanel(ChatRoomPanel.this);                                window.startChat();                                return;                            }                            serverErrorMessage(errorMessage);                        } else {                            if (cancelled) {                                errorMessage = "error";                            } else {                                //set up a packet to be sent to my user in                                // every groupchat                                Presence presence = new Presence(                                        Presence.Type.AVAILABLE, BuddyList                                                .getInstance()                                                .getCurrentStatusString(), 0,                                        BuddyList.getInstance()                                                .getCurrentPresenceMode());                                presence.setTo(getRoomName() + '/'                                        + getNickname());                                BuddyList.getInstance().getConnection()                                        .sendPacket(presence);                            }                        }                    }                });            } else {                errorMessage = "cancelled";            }            if (errorMessage != null) {                try {                    Thread.sleep(1000);                    leaveChat();                } catch (Exception neverCaught) {                }            }        }    }}

⌨️ 快捷键说明

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