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

📄 msnmenubar.java

📁 java版本的MSN,供大家交流学习使用
💻 JAVA
字号:
/* * @(#)MSNMenuBar.java * * Copyright (c) 2002, Jang-Ho Hwang * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 	1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 	2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 	3. Neither the name of the Jang-Ho Hwang nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * *    $Id: MSNMenuBar.java,v 1.16 2004/06/07 06:02:15 xrath Exp $ */package rath.jmsn;import java.awt.*;import java.awt.event.KeyEvent;import java.awt.event.InputEvent;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.lang.reflect.Method;import java.util.Properties;import java.util.Enumeration;import java.util.Iterator;import java.util.Locale;import javax.swing.*;import rath.msnm.UserStatus;import rath.jmsn.ui.WrapMenu;import rath.jmsn.ui.WrapMenuItem;import rath.jmsn.ui.WrapPopupMenu;import rath.jmsn.util.UserStatusBox;import rath.jmsn.util.Msg;/** * * @author Jang-Ho Hwang, rath@linuxkorea.co.kr * @version $Id: MSNMenuBar.java,v 1.16 2004/06/07 06:02:15 xrath Exp $ */public class MSNMenuBar extends JMenuBar implements ToolBox{	private JPopupMenu statusPopup = null;	private JMenuItem menuLogin, menuLogout;	private JMenuItem menuAddFriend, menuRenameFriend, menuRemoveFriend;	private JMenuItem menuAddGroup, menuRenameGroup, menuRemoveGroup;	private JMenuItem menuBlockFriend, menuUnblockFriend;	private JMenuItem menuBlockGroup, menuUnblockGroup;	private WrapMenu menuLocale;	private JMenu menuStat;	MainFrame main = null;	JCheckBoxMenuItem menuOffView;	public MSNMenuBar( MainFrame main, ActionGroup actions )	{		this.main = main;		init(actions);		disableLogin();	}	private void init( ActionGroup actions )	{		collectActions(actions);		statusPopup = new WrapPopupMenu();		add( createFileMenu() );		add( createViewMenu() );		add( createToolMenu() );		add( createHelpMenu() );	}	public void updateUI()	{		if( menuLocale!=null )		{			menuLocale.removeAll();			for(Iterator i=Msg.getAvailableLocales().iterator(); i.hasNext(); )			{				final Locale loc = (Locale)i.next();				JMenuItem item = menuLocale.add( loc.getDisplayName(), false );				item.setFont( FONT );				item.addActionListener( new ActionListener() {					public void actionPerformed( ActionEvent e )					{						Msg.setLocale( loc );					}				});			}		}		if( statusPopup!=null )			statusPopup.updateUI();		super.updateUI();	}	protected JMenu createFileMenu()	{		ActionMap action = getActionMap();		JMenu menu = new WrapMenu("menu.file");		menu.setMnemonic( Msg.get("menu.file.mnemonic").charAt(0) );		menu.setFont( MENU_HEADER_FONT );		menuLogin = menu.add( "menu.item.login" );		menuLogin.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.ALT_MASK) );		menuLogin.setFont( MENU_FONT );		menuLogin.addActionListener( action.get("actionLogin") );		menuLogout = menu.add( "menu.item.logout" );		menuLogout.setFont( MENU_FONT );		menuLogout.addActionListener( action.get("actionLogout") );		menu.addSeparator();		JMenuItem menuExit = menu.add( "menu.item.exit" );		menuExit.setFont( MENU_FONT );		menuExit.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK) );		menuExit.addActionListener( action.get("actionExit") );		return menu;	}	public JPopupMenu getStatusPopupMenu()	{		return this.statusPopup;	}	protected JMenu createViewMenu()	{		ActionMap action = getActionMap();		JMenu menu = new WrapMenu("menu.view");		menu.setMnemonic( Msg.get("menu.view.mnemonic").charAt(0) );		menu.setFont( MENU_HEADER_FONT );		JMenu menuBuddy = new WrapMenu("menu.item.friendview");		menuBuddy.setFont( MENU_FONT );		JMenuItem menuFRView = menuBuddy.add( "menu.item.friendview.fn" );		menuFRView.setFont( MENU_FONT );		menuFRView.addActionListener( action.get("actionBuddyView") );		JMenuItem menuLGView = menuBuddy.add( "menu.item.friendview.ln" );		menuLGView.setFont( MENU_FONT );		menuLGView.addActionListener( action.get("actionBuddyView") );		JMenuItem menuFRLGView = menuBuddy.add( "menu.item.friendview.fnln" );		menuFRLGView.setFont( MENU_FONT );		menuFRLGView.addActionListener( action.get("actionBuddyView") );		JMenuItem menuMyView = menuBuddy.add( "menu.item.friendview.my" );		menuMyView.setFont( MENU_FONT );		menuMyView.addActionListener( action.get("actionBuddyView") );		menu.add( menuBuddy );		menu.addSeparator();		JMenuItem menuRefresh = menu.add( "menu.item.refresh" );		menuRefresh.setFont( MENU_FONT );		menuRefresh.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0) );		menuRefresh.addActionListener( action.get("actionRefresh") );		menuOffView = new JCheckBoxMenuItem( Msg.get("menu.item.off.ignore") )		{			public void updateUI()			{				setText( Msg.get("menu.item.off.ignore") );				super.updateUI();			}		};		menuOffView.addActionListener( action.get("actionToggleOffView") );		menuOffView.setFont( MENU_FONT );		menu.add( menuOffView );		menu.addSeparator();		if( NativeToolkit.getInstance().isWindows )		{			JCheckBoxMenuItem menuAlwaysTop = new JCheckBoxMenuItem( Msg.get("menu.item.alwaysontop") )			{				public void updateUI()				{					setText( Msg.get("menu.item.alwaysontop") );					super.updateUI();				}			};			menuAlwaysTop.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.ALT_MASK) );			menuAlwaysTop.addActionListener( action.get("actionAlwaysOnTop") );			menuAlwaysTop.setFont( MENU_FONT );			menu.add( menuAlwaysTop );		}		WrapMenu menuUI = new WrapMenu("menu.item.lnf");		menuUI.setFont( FONT );		UIManager.LookAndFeelInfo[] lnfs = UIManager.getInstalledLookAndFeels();		for(int i=0; i<lnfs.length; i++)		{			final UIManager.LookAndFeelInfo info = lnfs[i];			JMenuItem item = menuUI.add( info.getName(), false );			item.setFont( FONT );			item.addActionListener( new ActionListener() {				public void actionPerformed( ActionEvent e )				{					try					{						UIManager.setLookAndFeel( info.getClassName() );					}					catch( Exception ex ) {}					main.updateUIAll();				}			});		}		menu.add( menuUI );		menuLocale = new WrapMenu("menu.item.locale");		menuLocale.setFont( FONT );		for(Iterator i=Msg.getAvailableLocales().iterator(); i.hasNext(); )		{			final Locale loc = (Locale)i.next();			JMenuItem item = menuLocale.add( loc.getDisplayName(Msg.getCurrentLocale()), false );			item.setFont( FONT );			item.addActionListener( new ActionListener() {				public void actionPerformed( ActionEvent e )				{		    		Msg.setLocale( loc );				}			});		}		menu.add( menuLocale );		return menu;	}	protected JMenu createToolMenu()	{		ActionMap action = getActionMap();		JMenu menu = new WrapMenu("menu.tool");		menu.setMnemonic( Msg.get("menu.tool.mnemonic").charAt(0) );		menu.setFont( MENU_HEADER_FONT );		menuStat = new WrapMenu( "menu.item.chstatus" );		menuStat.setFont( MENU_FONT );		addStatusSet( menuStat, statusPopup, action );		menu.add( menuStat );		menu.addSeparator();		menuAddFriend = menu.add( "menu.item.adduser" );		menuAddFriend.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.ALT_MASK) );		menuAddFriend.setFont( MENU_FONT );		menuAddFriend.addActionListener( action.get("actionAddFriend") );		menuRenameFriend = menu.add( "menu.item.renameuser" );		menuRenameFriend.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_M, InputEvent.CTRL_MASK) );		menuRenameFriend.setFont( MENU_FONT );		menuRenameFriend.addActionListener( action.get("actionRenameFriend") );		menuBlockFriend = menu.add( "menu.item.blockuser" );		menuBlockFriend.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_B, InputEvent.CTRL_MASK) );		menuBlockFriend.setFont( MENU_FONT );		menuBlockFriend.addActionListener( action.get("actionBlockFriend") );		menuUnblockFriend = menu.add( "menu.item.unblockuser" );		menuUnblockFriend.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK) );		menuUnblockFriend.setFont( MENU_FONT );		menuUnblockFriend.addActionListener( action.get("actionUnblockFriend") );		menuRemoveFriend = menu.add( "menu.item.removeuser" );		menuRemoveFriend.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0) );		menuRemoveFriend.setFont( MENU_FONT );		menuRemoveFriend.addActionListener( action.get("actionRemoveFriend") );		menu.addSeparator();		menuAddGroup = menu.add( "menu.item.addgroup" );		menuAddGroup.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK) );		menuAddGroup.setFont( MENU_FONT );		menuAddGroup.addActionListener( action.get("actionAddGroup") );		// added by pistos - for support group name change		menuRenameGroup = menu.add( "menu.item.renamegroup" );		menuRenameGroup.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_MASK) );		menuRenameGroup.setFont( MENU_FONT );		menuRenameGroup.addActionListener( action.get("actionRenameGroup") );		menuBlockGroup = menu.add( "menu.item.blockgroup" );		menuBlockGroup.setFont( MENU_FONT );		menuBlockGroup.addActionListener( action.get("actionBlockGroup") );		menuUnblockGroup = menu.add( "menu.item.unblockgroup" );		menuUnblockGroup.setFont( MENU_FONT );		menuUnblockGroup.addActionListener( action.get("actionUnblockGroup") );		menuRemoveGroup = menu.add( "menu.item.removegroup");		menuRemoveGroup.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK) );		menuRemoveGroup.setFont( MENU_FONT );		menuRemoveGroup.addActionListener( action.get("actionRemoveGroup") );		menu.addSeparator();		JMenuItem menuOption = menu.add( "menu.item.option" );		menuOption.setMnemonic( Msg.get("menu.item.option.mnemonic").charAt(0) );		menuOption.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.ALT_MASK) );		menuOption.setFont( MENU_FONT );		menuOption.addActionListener( action.get("actionOption") );		return menu;	}	private void addStatusSet( JMenu menu, JPopupMenu pop, ActionMap action )	{		String[] codes = new String[] {		    "status.online", "status.away", "status.brb", "status.busy",			"status.idle", "status.eat", "status.phone", "status.hidden" };		for(int i=0; i<codes.length; i++)		{		    JMenuItem item = menu.add( codes[i] );			item.setFont( FONT );			item.addActionListener( action.get("actionStatusChange") );			JMenuItem popItem = pop.add( codes[i] );			popItem.setFont( FONT );			popItem.addActionListener( action.get("actionStatusChange") );		}	}	protected JMenu createHelpMenu()	{		ActionMap action = getActionMap();		JMenu menu = new WrapMenu("menu.help");		menu.setMnemonic( Msg.get("menu.help.mnemonic").charAt(0) );		menu.setFont( MENU_HEADER_FONT );		JMenuItem bugMenu = menu.add( "menu.item.bugreport" );		bugMenu.setFont( MENU_FONT );		bugMenu.addActionListener( action.get("actionBugReport") );		bugMenu.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_F8,0) );		JMenuItem featureMenu = menu.add( "menu.item.reqfeature" );		featureMenu.setFont( MENU_FONT );		featureMenu.addActionListener( action.get("actionFeatureRequest") );		featureMenu.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_F9,0) );		menu.addSeparator();		JMenuItem aboutMenu = menu.add( "menu.item.about" );		aboutMenu.setFont( MENU_FONT );		aboutMenu.addActionListener( action.get("actionAbout") );		return menu;	}	public void setLoginEnabled( boolean enable )	{		menuLogin.setEnabled( enable );	}	public boolean isLoginEnabled()	{		return menuLogin.isEnabled();	}	public void enableLogin()	{		SwingUtilities.invokeLater( new Runnable() {			public void run()			{				menuLogin.setEnabled( false );				menuLogout.setEnabled( true );				menuAddFriend.setEnabled( true );				menuRemoveFriend.setEnabled( true );				menuAddGroup.setEnabled( true );				menuRenameGroup.setEnabled( true );				menuRemoveGroup.setEnabled( true );				menuStat.setEnabled( true );				menuBlockFriend.setEnabled( true );				menuUnblockFriend.setEnabled( true );				menuBlockGroup.setEnabled( true );				menuUnblockGroup.setEnabled( true );				menuRenameFriend.setEnabled( true );			}		});	}	public void disableLogin()	{		SwingUtilities.invokeLater( new Runnable() {			public void run()			{				menuLogin.setEnabled( true );				menuLogout.setEnabled( false );				menuAddFriend.setEnabled( false );				menuRemoveFriend.setEnabled( false );				menuAddGroup.setEnabled( false );				menuRenameGroup.setEnabled( false );				menuRemoveGroup.setEnabled( false );				menuStat.setEnabled( false );				menuBlockFriend.setEnabled( false );				menuUnblockFriend.setEnabled( false );				menuBlockGroup.setEnabled( false );				menuUnblockGroup.setEnabled( false );				menuRenameFriend.setEnabled( false );			}		});	}	protected void collectActions( final ActionGroup actions )	{		ActionMap action = getActionMap();		Method[] ms = actions.getClass().getMethods();		for(int i=0; i<ms.length; i++)		{			final Method m = ms[i];			String name = m.getName();			if( name.startsWith("action") )			{				action.put( name, new AbstractAction() {					public void actionPerformed( ActionEvent e )					{						try						{							if( m.getParameterTypes().length==0 )								m.invoke( actions, new Object[] {} );							else								m.invoke( actions, new Object[] {e} );						}						catch( Exception ex ) {							ex.printStackTrace();						}					}				});			}		}	}}

⌨️ 快捷键说明

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