📄 bsbrowsewindow.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 + -