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

📄 bsbrowsewindow.java

📁 一款即时通讯软件
💻 JAVA
字号:
package edu.ou.kmi.buddyspace.plugins.browse.gui;

/*
 * BSBrowseWindow.java
 *
 * Project: BuddySpace
 * (C) Copyright Knowledge Media Institute 2002
 *
 *
 * Created on 19 November 2002, 9:55
 */

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.net.*;

import org.jabber.jabberbeans.*;
import org.jabber.jabberbeans.Extension.*;
import org.jabber.jabberbeans.util.*;

import edu.ou.kmi.buddyspace.core.*;
import edu.ou.kmi.buddyspace.gui.*;
import edu.ou.kmi.buddyspace.utils.*;
import edu.ou.kmi.buddyspace.plugins.browse.core.*;

/**
 * <code>BSBrowseWindow</code> is the browse GUI.
 *
 * @author  Jiri Komzak, Knowledge Media Institute, Open University, United Kingdom
 */
public class BSBrowseWindow extends DockableWindow 
                            implements ActionListener, BrowseListener,
                                       MouseListener, HyperlinkListener, 
                                       KeyListener {
                          
    private BSBrowseBean browseBean = null;
    private String jidStr;
    private PacketID servedID = new PacketID(null);
    private Vector history = new Vector();
    private int currHistoryNum = -1;
    
    private JPanel mainPanel;
    
    JPanel buttonPanel;
    JTextField progressInfo;
    JButton browseButton;
    JButton closeButton;
    JButton dockButton;
    JButton bookmarkButton;
    JPanel centralPanel;
    JScrollPane browseScrollPane;
    JScrollPane thisItemScrollPane;
    JScrollPane selectedItemScrollPane;
    BSBrowseItemView thisItemView;
    BSBrowseItemView selectedItemView;
    JList browseList;
    JTextField addressTextField;
    JSplitPane mainSplitPane;
    JSplitPane rightSplitPane;
    JPanel addressPanel;
    JButton backButton;
    JButton forwardButton;
    JPanel addressButtonPanel;
    
    /** Constructor */
    BSBrowseWindow(Window parent, BSBrowseWinManager winMan, String ID,
                   String title, String jidStr, Image icon,
                   BSBrowseBean browseBean, boolean docked) {
                   
        super(ID, title, icon, new Dimension(450, 400), docked, winMan);
        
        this.jidStr = jidStr;
        
        this.browseBean = browseBean;
        if (browseBean != null)
            browseBean.addBrowseListener(this);
        
        initComponents();
        
        if (browseBean != null && jidStr != null)
            browseTo(jidStr);
    }
    
    /** Inits GUI components */
    private void initComponents() {
        mainPanel = new JPanel(new BorderLayout());
        
        //*** button panel ***
        buttonPanel = new JPanel();
        
        progressInfo = new JTextField("", 20);
        progressInfo.setEditable(false);
        buttonPanel.add(progressInfo);
        
        closeButton = new JButton();
        closeButton.setText("Close");
        closeButton.addActionListener(this);
        buttonPanel.add(closeButton);
        
        JPanel checkBoxesPanel = new JPanel();
        Icon icon = new ImageIcon(ClassLoader.getSystemResource(!docked?
                                "images/dock.gif" : "images/float.gif"));
        dockButton = new JButton(icon);
        dockButton.setToolTipText(docked? "Float" : "Dock");
        dockButton.addActionListener(this);
        checkBoxesPanel.add(dockButton);
        if (!OSVersion.isJava1Point4orHigher())
            dockButton.setEnabled(false);
        icon = new ImageIcon(ClassLoader.getSystemResource("images/bookmark.gif"));
        bookmarkButton = new JButton(icon);
        bookmarkButton.setToolTipText("Add bookmark");
        bookmarkButton.addActionListener(this);
        checkBoxesPanel.add(bookmarkButton);
        
        browseList = new JList();
        browseList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        browseList.setCellRenderer(new BSBrowseListCellRenderer());
        browseList.addMouseListener(this);
        browseList.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                //Ignore extra messages.
                if (e.getValueIsAdjusting()) return;
                
                BrowseItem bi = (BrowseItem) browseList.getSelectedValue();
                selectedItemView.display(bi);
            }
        });
        browseScrollPane = new JScrollPane(browseList);
        //browseScrollPane.setPreferredSize(new Dimension(200,300));
        browseScrollPane.setBorder(new TitledBorder("Subitems"));
        
        addressPanel = new JPanel(new BorderLayout());
        JLabel addressLabel = new JLabel("Address:");
        addressPanel.add(addressLabel, BorderLayout.WEST);
        addressTextField = new JTextField();
        addressTextField.addKeyListener(this);
        addressPanel.add(addressTextField, BorderLayout.CENTER);
        addressButtonPanel = new JPanel();
        browseButton = new JButton("Browse");
        browseButton.addActionListener(this);
        addressButtonPanel.add(browseButton);
        backButton = new JButton("<-");
        backButton.addActionListener(this);
        addressButtonPanel.add(backButton);
        forwardButton = new JButton("->");
        forwardButton.addActionListener(this);
        addressButtonPanel.add(forwardButton);
        addressPanel.add(addressButtonPanel, BorderLayout.EAST);

        centralPanel = new JPanel(new BorderLayout());
        centralPanel.add(addressPanel, BorderLayout.NORTH);
        
        thisItemView = new BSBrowseItemView();
        thisItemView.addHyperlinkListener(this);
        thisItemScrollPane = new JScrollPane(thisItemView);
        thisItemScrollPane.setBorder(new TitledBorder("Item details"));
        selectedItemView = new BSBrowseItemView();
        selectedItemView.addHyperlinkListener(this);
        selectedItemScrollPane = new JScrollPane(selectedItemView);
        selectedItemScrollPane.setBorder(new TitledBorder("Selected subitem details"));
        
        rightSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, browseScrollPane, selectedItemScrollPane);
        //rightSplitPane.setDividerLocation(0.5);
        rightSplitPane.setDividerLocation(150);
        mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, thisItemScrollPane, rightSplitPane);
        //mainSplitPane.setDividerLocation(0.5);
        mainSplitPane.setDividerLocation(150);
        centralPanel.add(mainSplitPane, BorderLayout.CENTER);
        //centralPanel.add(thisItemScrollPane, BorderLayout.WEST);
        //centralPanel.add(selectedItemScrollPane, BorderLayout.EAST);
        
        mainPanel.add(checkBoxesPanel, BorderLayout.NORTH);
        mainPanel.add(centralPanel, BorderLayout.CENTER);
        mainPanel.add(buttonPanel, BorderLayout.SOUTH);
        
        setLayout(new BorderLayout());
        add(mainPanel, BorderLayout.CENTER);
        
        backButton.setEnabled(false);
        forwardButton.setEnabled(false);
    }
    
    /** Handles actions from GUI controls */
    public void actionPerformed(ActionEvent evt) {
        Object source = evt.getSource();
        // close
        if (source == closeButton) {
            winMan.closeWindow(this);
        }
        // send message
        else if (source == browseButton) {
            jidStr = addressTextField.getText();
            browseTo(jidStr);
        }
        else if (evt.getSource() == dockButton) {
            if (winMan != null) {
                winMan.setWindowDocked(this, !docked, true);
                Icon icon = new ImageIcon(ClassLoader.getSystemResource(!docked?
                                "images/dock.gif" : "images/float.gif"));
                dockButton.setIcon(icon);
                dockButton.setToolTipText(docked? "Float" : "Dock");
                winMan.selectWindow(this);
            }
        }
        else if (evt.getSource() == backButton) {
            if (currHistoryNum > 0) {
                browseToHistory(currHistoryNum-1);
            }
        }
        else if (evt.getSource() == forwardButton) {
            if (history.size()-1 > currHistoryNum) {
                browseToHistory(currHistoryNum+1);
            }
        }
        else if (evt.getSource() == bookmarkButton) {
            if (winMan != null)
                ((BSBrowseWinManager)winMan).addBookmark(JID.fromString(jidStr));
        }
    }
    
    protected void browseToImpl(String jidStr) {
        this.jidStr = jidStr;
        winMan.setWindowTitle(this, jidStr);
        addressTextField.setText(jidStr);
        thisItemView.display(null);
        selectedItemView.display(null);
        browseList.setListData(new Vector());
        backButton.setEnabled(currHistoryNum > 0);
        forwardButton.setEnabled(currHistoryNum < history.size()-1);
        if (browseBean != null)
            browseBean.browseTo(jidStr, servedID, false);
    }
    
    protected void browseToHistory(int index) {
        currHistoryNum = index;
        browseToImpl((String)history.elementAt(index));
    }
    
    protected void browseTo(String jidStr) {
        // removes part of history
        while (history.size()-1 > currHistoryNum)
            history.removeElementAt(currHistoryNum+1);
        // adds new jid into history
        history.add(jidStr);
        currHistoryNum++;
        progressInfo.setText("Sending request...");
        browseToImpl(jidStr);
    }
    
    /** <code>BSBrowseListener</code> function. */
    public void error(InfoQuery iq, String id) {
        if (servedID.getID() == null || !servedID.getID().equals(id)) return;
        
        String errCode = iq.getErrorCode();
        String errMsg = iq.getErrorText();
        winMan.selectWindow(this);
        progressInfo.setText("Error");
        JOptionPane.showMessageDialog(docked? ((BSBrowseWinManager)winMan).mainFrame : frame, 
                                      "Error " + errCode + ": " + errMsg + "!",
                                      "Error", 
                                      JOptionPane.ERROR_MESSAGE);
        progressInfo.setText("");
        servedID.setID(null);
    }
    
    /** <code>BSBrowseListener</code> function. */
    public void received(BrowseItem b, String id) {
        if (servedID.getID() == null || !servedID.getID().equals(id)) return;
        
        thisItemView.display(b);
        browseList.setListData(b.getChildren());
        browseList.clearSelection();
        
        progressInfo.setText("Done");
        servedID.setID(null);
    }
    
    /** Removes this from listeners for browse events */
    public void cancelListening() {
        if (browseBean != null)
            browseBean.removeBrowseListener(this);
    }
    
    /** <code>MouseListener</code> function - catches double-clicks. */
    public void mouseClicked(MouseEvent e) {
        // handles only double clicks on JID nodes
        if (e.getClickCount() == 2) {
            BrowseItem bi = (BrowseItem) browseList.getSelectedValue();
            if (bi == null) return;
            JID jid = bi.getJID();
            browseTo((jid != null)? jid.toString() : null);
        }
    }
     
    /** <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();
            ((BSBrowseWinManager)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();
            browseTo(jidStr);
        }
    }
    
    
    /** Renderer of list of browse items */
    class BSBrowseListCellRenderer 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 BSBrowseListCellRenderer() {
            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);
            BrowseItem bi = (BrowseItem) value;
            String name = bi.getName();
            String category = bi.getCategory();
            String type = bi.getType();
            setText(name + " (" + category /*+ " / " + type*/ + ")");

            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 + -