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

📄 bsdiscowindow.java

📁 一款即时通讯软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        selectedItemView.display(null);
        browseList.setListData(new Vector());
        backButton.setEnabled(currHistoryNum > 0);
        forwardButton.setEnabled(currHistoryNum < history.size()-1);
        if (discoBean != null)
            discoBean.discoverItems(jidStr, nodeStr, itemsServedID);
    }
    
    protected void discoverHistory(int index) {
        currHistoryNum = index;
        BSDiscoHistoryItem hi = (BSDiscoHistoryItem)history.elementAt(index);
        discoverImpl(hi.jidStr, hi.node);
        discoverInfoFor(hi.jidStr, hi.node);
    }
    
    protected void discover(String jidStr, String nodeStr) {
        // removes part of history
        while (history.size()-1 > currHistoryNum)
            history.removeElementAt(currHistoryNum+1);
        // adds new jid into history
        history.add(new BSDiscoHistoryItem(jidStr, nodeStr));
        currHistoryNum++;
        progressInfo.setText("Sending request...");
        discoverImpl(jidStr, nodeStr);
        discoverInfoFor(jidStr, nodeStr);
    }
    
    
    /** Sends request for disco#info for given item */
    protected void discoverInfoFor(DiscoItem di) {
        if (di == null) return;
        String jidStr = di.getAttribute("jid");
        String nodeStr = di.getAttribute("node");
        progressInfo.setText("Sending request...");
        discoverInfoFor(jidStr, nodeStr);
    }
    
    
    /** Sends request for disco#info for given jid and node */
    protected void discoverInfoFor(String jidStr, String nodeStr) {
        progressInfo.setText("Sending request...");
        if (discoBean != null)
            discoBean.discoverInfo(jidStr, nodeStr, infoServedID);
    }
    
    
    /** Removes this from listeners for disco events */
    public void cancelListening() {
        if (discoBean != null)
            discoBean.removeDiscoListener(this);
    }
    
    /** <code>MouseListener</code> function - catches double-clicks. */
    public void mouseClicked(MouseEvent e) {
        // handles only double clicks on JID nodes
        if (e.getClickCount() == 2) {
            DiscoItem di = (DiscoItem) browseList.getSelectedValue();
            if (di == null) return;
            String jidStr = di.getAttribute("jid");
            String nodeStr = di.getAttribute("node");
            discover(jidStr, nodeStr);
        }
    }
     
    /** <code>MouseListener</code> function - catches popup clicks. */
    public void mousePressed(MouseEvent e) {
        //maybeShowPopup(e);
    }
     
    /** <code>MouseListener</code> function - catches popup clicks. */
    public void mouseReleased(MouseEvent e) {
        //maybeShowPopup(e);
    }
    
    /** <code>MouseListener</code> function - empty implementation. */
    public void mouseEntered(MouseEvent e) { }
    /** <code>MouseListener</code> function - empty implementation. */
    public void mouseExited(MouseEvent e) { }
    
    /** Called when link action performed - calls performAction of mainFrame */
    public void hyperlinkUpdate(HyperlinkEvent evt) {
        if (HyperlinkEvent.EventType.ACTIVATED == evt.getEventType()) {
            /*String namespace = evt.getDescription();
            JID jid;
            if (evt.getSource() == thisItemView)
                jid = thisItemView.getJID();
            else if (evt.getSource() == selectedItemView)
                jid = selectedItemView.getJID();
            else
                jid = selectedItemView.getJID();
            ((BSDiscoWinManager)winMan).callPerformAction(jid, namespace);*/
        }
    }
    
    /** Empty implementation */
    public void keyTyped(KeyEvent evt) { }
    /** Empty implementation */
    public void keyReleased(KeyEvent keyEvent) { }
    
    /** Handles key strokes - sends on ENTER */
    public void keyPressed(KeyEvent keyEvent) {
        if (keyEvent.getKeyCode() == KeyEvent.VK_ENTER) {
            jidStr = addressTextField.getText();
            nodeStr = nodeTextField.getText();
            if ("".equals(nodeStr)) nodeStr = null;
            discover(jidStr, nodeStr);
        }
    }
    
    /** Called when info received  */
    public void receivedInfo(IQDiscoInfo info, String id) {
        if (infoServedID.getID() == null || !infoServedID.getID().equals(id)) return;
        
        selectedItemView.display(info);
        
        infoServedID.setID(null);
        if (itemsServedID.getID() == null)
            progressInfo.setText("Done");
    }
    
    /** <code>BSDiscoListener</code> function called when items received  */
    public void receivedItems(IQDiscoItems items, String id) {
        if (itemsServedID.getID() == null || !itemsServedID.getID().equals(id)) return;
        
        browseList.setListData(items.getItems());
        browseList.clearSelection();
        
        itemsServedID.setID(null);
        if (infoServedID.getID() == null)
            progressInfo.setText("Done");
    }
    
    /** <code>BSDiscoListener</code> function. */
    public void error(InfoQuery iq, String id) {
        if (id == null || 
            (!id.equals(itemsServedID.getID()) && 
            !id.equals(infoServedID.getID()) ) )
            return;
        
        String errCode = iq.getErrorCode();
        String errMsg = iq.getErrorText();
        winMan.selectWindow(this);
        progressInfo.setText("Error");
        JOptionPane.showMessageDialog(docked? ((BSDiscoWinManager)winMan).mainFrame : frame, 
                                      "Error " + errCode + ": " + errMsg + "!",
                                      "Error", 
                                      JOptionPane.ERROR_MESSAGE);
        progressInfo.setText("");
        if (id.equals(itemsServedID.getID()))
            itemsServedID.setID(null);
        else
            infoServedID.setID(null);
    }
    
    /** Called when a send fails  */
    public void sendFailed(InfoQuery iq, String id) {
        if (id == null || 
            (!id.equals(itemsServedID.getID()) && 
            !id.equals(infoServedID.getID()) ) )
            return;
        
        winMan.selectWindow(this);
        progressInfo.setText("Error");
        JOptionPane.showMessageDialog(docked? ((BSDiscoWinManager)winMan).mainFrame : frame, 
                                      "Request couldn't be sent",
                                      "Error", 
                                      JOptionPane.ERROR_MESSAGE);
        progressInfo.setText("");
        if (id.equals(itemsServedID.getID()))
            itemsServedID.setID(null);
        else
            infoServedID.setID(null);
    }
    
    /** Called when empty result (possible of previous "set") received  */
    public void receivedEmptyResult(InfoQuery iq, String id) { }    
    
    /** Called when request for info received  */
    public void receivedInfoRequest(InfoQuery iq, String id) { }
    
    /** Called when request for items received  */
    public void receivedItemsRequest(InfoQuery iq, String id) { }
    
 
    /** Class for history holding jid and node */
    class BSDiscoHistoryItem {
        public String node = null;
        public String jidStr = null;
        
        public BSDiscoHistoryItem(String jidStr, String node) {
            this.node = node;
            this.jidStr = jidStr;
        }
    }
    
    
    /** Renderer of list of disco items */
    class BSDiscoListCellRenderer extends JLabel 
                                   implements ListCellRenderer {
                                       
        /*final static ImageIcon longIcon = new ImageIcon("component.gif");
        final static ImageIcon shortIcon = new ImageIcon("service.gif");*/
        protected Border noFocusBorder;

        /**
         * Constructor.
         */
        public BSDiscoListCellRenderer() {
            super();
            if (noFocusBorder == null) {
                noFocusBorder = new EmptyBorder(1, 1, 1, 1);
            }
            setOpaque(true);
            setBorder(noFocusBorder);
        }
    
        public Component getListCellRendererComponent(
        JList list,
        Object value,            // value to display
        int index,               // cell index
        boolean isSelected,      // is the cell selected
        boolean cellHasFocus) {  // the list and the cell have the focus
        
            setComponentOrientation(list.getComponentOrientation());
            if (isSelected) {
                setBackground(list.getSelectionBackground());
                setForeground(list.getSelectionForeground());
            }
            else {
                setBackground(list.getBackground());
                setForeground(list.getForeground());
            }

            //setIcon(null);
            DiscoItem di = (DiscoItem) value;
            String name = di.getAttribute("name");
            String jidStr = di.getAttribute("jid");
            String node = di.getAttribute("node");
            //setText(name + " (" + category /*+ " / " + type*/ + ")");
            String txt = ((name != null)? name : "");
            if (jidStr != null) {
                txt += " (" + jidStr;
                if (node == null) txt += ")";
            }
            if (node != null) {
                if (jidStr != null) txt += " - " + node + ")";
                else txt += " (" + node + ")";
            }
            setText(txt);

            setEnabled(list.isEnabled());
            setFont(list.getFont());
            setBorder((cellHasFocus) ? UIManager.getBorder("List.focusCellHighlightBorder") : noFocusBorder);
            
            return this;
        }
    }
    
}

⌨️ 快捷键说明

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