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

📄 statuspanel.java

📁 一个类似QQ的在线通讯聊天软件原码,适合初学者参考学习。
💻 JAVA
字号:
package openicq.gui;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import javax.swing.event.PopupMenuEvent;import javax.swing.event.PopupMenuListener;import openicq.Start;import openicq.data.Resource;import org.javalib.gui.IconListCellRenderer;import org.javalib.gui.image.ImagePanel;import JOscarLib.Core.OscarConnection;import JOscarLib.Setting.Enum.StatusModeEnum;import JOscarLib.Tool.OscarInterface;/** * The <code>StatusPanel</code> class is a panel with the status modes. * @author Hansgeorg Schwibbe * @copyright 2004 */public class StatusPanel extends JPanel{  private MainFrame mainFrame;  private int lastIndex;  private IconListCellRenderer iconCellRenderer;  protected JComboBox jComboBoxStatus;  protected StatusModeEnum[] statusMode = new StatusModeEnum[8];  protected ImagePanel imagePanel;  /**   * Initializes a new instance of the class <code>StatusPanel</code>.   * @param parent the parent frame   */  public StatusPanel(JFrame parent)  {    this.mainFrame = (MainFrame) parent;    statusMode[0] = new StatusModeEnum(StatusModeEnum.ONLINE);    statusMode[1] = new StatusModeEnum(StatusModeEnum.FREE_FOR_CHAT);    statusMode[2] = new StatusModeEnum(StatusModeEnum.AWAY);    statusMode[3] = new StatusModeEnum(StatusModeEnum.NA);    statusMode[4] = new StatusModeEnum(StatusModeEnum.OCCUPIED);    statusMode[5] = new StatusModeEnum(StatusModeEnum.DND);    statusMode[6] = new StatusModeEnum(StatusModeEnum.INVISIBLE);    statusMode[7] = new StatusModeEnum(StatusModeEnum.OFFLINE);    this.setLayout(new FlowLayout());    imagePanel = new ImagePanel();    imagePanel.setImage(Resource.ICON_SOURCE_STATUS[7], 1);    iconCellRenderer = new IconListCellRenderer(Resource.ICON_SOURCE_STATUS);    jComboBoxStatus = new JComboBox();    jComboBoxStatus.setRenderer(iconCellRenderer);    updateComboBox();    jComboBoxStatus.addPopupMenuListener(new PopupMenuListener()    {      public void popupMenuWillBecomeVisible(PopupMenuEvent e)      {      }      public void popupMenuWillBecomeInvisible(PopupMenuEvent e)      {        action_changeStatus();      }      public void popupMenuCanceled(PopupMenuEvent e)      {      }    });    jComboBoxStatus.addActionListener(new ActionListener()    {      public void actionPerformed(ActionEvent e)      {        if (e.getModifiers() == AWTEvent.MOUSE_EVENT_MASK)        {          action_changeStatus();        }      }    });    jComboBoxStatus.addKeyListener(new KeyListener()    {      public void keyPressed(KeyEvent e)      {      }      public void keyReleased(KeyEvent e)      {      }      public void keyTyped(KeyEvent e)      {        if (e.getKeyChar() == KeyEvent.VK_ENTER)        {          action_changeStatus();        }      }    });    jComboBoxStatus.setSelectedIndex(7);    lastIndex = jComboBoxStatus.getSelectedIndex();    this.add(imagePanel);    this.add(jComboBoxStatus);  }  /**   * Action 'Change the status'.   */  protected synchronized void action_changeStatus()  {    if (lastIndex == jComboBoxStatus.getSelectedIndex())    {      return;    }    final int index = jComboBoxStatus.getSelectedIndex();    synchronized (Start.env)    {      if (index < 7)      {        if (Start.env.getConnection() == null            || !Start.env.getConnection().isLogged())        {          String title = ((String[]) mainFrame.localized.get("stdButtons"))[7];          if (mainFrame.showPasswordDialog(title) == false)          {            jComboBoxStatus.setSelectedIndex(7);            return;          }          String ownId = Start.env.getOwnContact().getContactId();          Start.env.setConnection(new OscarConnection(Start.env.getHost(),                                                      Start.env.getPort(),                                                      ownId,                                                      Start.env.getPassword()));          Start.env.getConnection().addObserver(new Observer()          {            public void update(Observable obs, Object obj)            {              OscarInterface.changeStatus(Start.env.getConnection(),                                          statusMode[index]);              mainFrame.contactPanel.initAll();              imagePanel.setImage(Resource.ICON_SOURCE_STATUS[index], 1);              Start.env.setLoginStatus(statusMode[index].getMode());              SysTray.setPrimaryIcon(Resource.ICON_SOURCE_TRAY[index]);              mainFrame.repaint();              mainFrame.show();            }          });        }        else        {          OscarInterface.changeStatus(Start.env.getConnection(),                                      statusMode[index]);          imagePanel.setImage(Resource.ICON_SOURCE_STATUS[index], 1);          Start.env.setLoginStatus(statusMode[index].getMode());          SysTray.setPrimaryIcon(Resource.ICON_SOURCE_TRAY[index]);          mainFrame.repaint();          mainFrame.show();        }        lastIndex = jComboBoxStatus.getSelectedIndex();      }      else      {        try        {          imagePanel.setImage(Resource.ICON_SOURCE_STATUS[7], 1);          lastIndex = jComboBoxStatus.getSelectedIndex();          if (Start.env.getConnection() == null              || !Start.env.getConnection().isLogged())          {            throw new Exception();          }          Start.env.getConnection().close();          Start.env.setConnection(null);          StatusModeEnum statusMode;          String iconPath = Resource.ICON_SOURCE_STATUS[7];          int size = Start.env.getKnownList().getContactListSize();          for (int idx = 1; idx <= size; idx++)          {            statusMode = new StatusModeEnum(StatusModeEnum.OFFLINE);            Start.env.getKnownList().get(idx - 1).setCurrentStatus(statusMode);            mainFrame.contactPanel.listIconSources.set(idx, iconPath);          }          ArrayList iconSources = mainFrame.contactPanel.listIconSources;          Object[] contactIds = mainFrame.contactPanel.listContactIds.toArray();          mainFrame.contactPanel.manager.setIconSources(iconSources, contactIds);          try          {            SysTray.setPrimaryIcon(Resource.ICON_SOURCE_TRAY[7]);          }          catch (Exception ex)          {            System.err.println(this.getClass().getName() + ": " + ex.toString());          }          mainFrame.repaint();          mainFrame.show();        }        catch (Exception ex)        {          String msg, title;          msg = ((String[]) mainFrame.localized.get("errorMessages"))[0];          title = ((String[]) mainFrame.localized.get("messageTitlese"))[0];          JOptionPane.showMessageDialog(mainFrame, msg, title,                                        JOptionPane.ERROR_MESSAGE);        }      }    }  }  /**   * Selects the combo box element at the specified index.   * @param index the specified index   */  protected void action_setSelectedIndex(int index)  {    this.jComboBoxStatus.setSelectedIndex(index);    this.lastIndex = index;  }  /**   * Updates the combo box.   */  public void updateComboBox()  {    int savedIndex = jComboBoxStatus.getSelectedIndex();    jComboBoxStatus.removeAllItems();    String item;    for (int index = 0; index <= 7; index++)    {      item = ((String[]) mainFrame.localized.get("StatusPanelList"))[index];      jComboBoxStatus.addItem(item);    }    int width = jComboBoxStatus.getMinimumSize().width                + iconCellRenderer.getMaxIconWidth();    int height = jComboBoxStatus.getMinimumSize().height;    jComboBoxStatus.setPreferredSize(new Dimension(width, height));    jComboBoxStatus.setSelectedIndex(savedIndex);  }}

⌨️ 快捷键说明

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