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