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

📄 menupanel.java

📁 Java实现的遗传算法工具集:GA Playground
💻 JAVA
字号:
// MenuPanel:  The Menu Container class.

// Uses text Labels and PopupMenus to simulate a Menu Bar. Standard MenuBars
// can only be used in Frame windows, but this can also be used in Applets, as
// well as any other Container class.

// DISCLAIMER:
// Written by Bruce Stone.  (c)1997-1998 Stonerware Enterprises.
// You are free to modify this code provided you include this disclaimer.

// USAGE:
// Set up your MenuBar object as usual, then call setMenuBar(menuBar).
// You can use MenuPanel.makeMenu(...) to help create MenuBar items quickly.


import java.awt.*;
import java.awt.event.*;

class MenuPanel extends Container implements MouseListener, MouseMotionListener
{
	PopupMenu popList[];			// A PopupMenu for each item in your "menu bar".
	Label     lblList[];			// Labels to hold the names of "menu bar" items.
	Color     clrDefault;			// Default color to use for this control
	int       idxHighlight;			// The menu item index that has the focus. (-1=none)
	int       idxPressed;			// Menu item idx that user clicked on
	boolean   bMenuUp;
//	String    szInfo = "";


	// Default constructor for the MenuPanel class.
	MenuPanel()
	{
		setLayout(new FlowLayout(FlowLayout.LEFT, 4, 3));
		clrDefault = SystemColor.menu;
		setBackground(clrDefault);
		addMouseMotionListener(this);    addMouseListener(this);
		idxHighlight = -1;    idxPressed = -1;    bMenuUp = false;
		
		lblList = new Label[1];
		lblList[0] = new Label("Testing...", Label.CENTER);
		lblList[0].addMouseMotionListener(this);    lblList[0].addMouseListener(this);

		add(lblList[0]);
		validate();
	}


	// Converts a MenuBar to a set of Label/PopupMenu pairs used by MenuPanel.
	public void setMenuBar(MenuBar mBar)
	{
		clearMouseListeners();
		int menuCount = mBar.getMenuCount();
		lblList = new Label[menuCount];
		popList = new PopupMenu[menuCount];
		

		// For each Menu in the MenuBar...
		for (int i = 0;  i < menuCount;  i++)
		{
			Menu m = mBar.getMenu(i);
			String szName = m.getLabel();
			int itemCount = m.getItemCount();
			Font menuFont = new Font("Helvetica",Font.BOLD,12);

			// Generate the corresponding Label/PopupMenu object pairs...
			lblList[i] = new Label(szName, Label.CENTER);
			lblList[i].addMouseMotionListener(this);
			lblList[i].addMouseListener(this);
			Font fnt = lblList[i].getFont();
			add(lblList[i]);

			// Build this PopupMenu item by item (assignment won't work).
			popList[i] = new PopupMenu(szName);
			for (int j = 0;  j < itemCount;  j++)
			{
				MenuItem mi = m.getItem(0);
				//mi.setFont(fnt);
				mi.setFont(menuFont);
				popList[i].add(mi);
			}
			lblList[i].add(popList[i]);
		}
	}


	// Paints any 3D rectangles around the Menu labels.
	public void paint(Graphics g)
	{
		Rectangle rect = getBounds();

		g.setColor(clrDefault);						// Prepares screen wash
		g.fillRect(0, 0, rect.width, rect.height);	// fill with bkg color

//		g.setColor(Color.black);
//		g.drawString(szInfo, 150, 10);
//		g.setColor(clrDefault);

		// Paint 3D line underneath menus...
		g.draw3DRect(rect.x+1,rect.y+rect.height-3, rect.width-4,1, false);

		// Paint the Labels and PopupMenus as appropriate...
		for (int i = 0;  i < lblList.length;  i++)
		{
			rect = lblList[i].getBounds();
			if (i == idxHighlight)
				g.draw3DRect(rect.x-1,rect.y-1, rect.width+2,rect.height+2, true);
			if (i == idxPressed)
			{
				g.draw3DRect(rect.x-1,rect.y-1, rect.width+2,rect.height+2, false);
				if (bMenuUp == false)
				{
					bMenuUp = true;
					popList[i].show(this, rect.x, rect.y+rect.height+1);
				}
			}
		}
	}


	// Used to clear any Listeners before re-creating them with setMenuBar()
	protected void clearMouseListeners()
	{
		for (int i = 0;  i < lblList.length;  i++)
		{
			remove(lblList[i]);
			lblList[i].removeMouseListener(this);
			lblList[i].removeMouseMotionListener(this);
		}
	}


	// A simplified interface to install Menus and register them for events.
	// parent - String for Menu name, or other Menu object (i.e. PopupMenus) 
	// items  - Object array with Strings, MenuItems or "null" for Separators.
	// target - The ActionListener who receives the Menu events.
	/* Example 1:
		mbar.add(makeMenu("Help", new Object[] { "Index","About" }, this) );
	   Example 2:
		mbar.add(makeMenu("Edit", new Object[] { "Undo", null,
			new MenuItem("Cut", new MenuShortcut(KeyEvent.VK_LEFT) ),
			makeMenu("Options", new Object[] { new CheckboxMenuItem("Insert Mode"), }, this) }, this) );
	*/
	static Menu makeMenu(Object parent, Object[] items, Object target)
	{
		Menu m = null;
		Font menuFont = new Font("Helvetica",Font.BOLD,12);

		if (parent instanceof Menu)
			m = (Menu)parent;
		else if (parent instanceof String)
			m = new Menu((String)parent);
		else
			return null;

		for (int i = 0;  i < items.length;  i++)
		{	if (items[i] instanceof String)
			{	MenuItem mi = new MenuItem((String)items[i]);
				if (target instanceof ActionListener)
					mi.addActionListener((ActionListener)target);
				m.add(mi);
			}
			else if (items[i] instanceof CheckboxMenuItem  &&
				target instanceof ItemListener)
			{	CheckboxMenuItem cmi = (CheckboxMenuItem)items[i];
				cmi.addItemListener((ItemListener)target);
				cmi.setFont(menuFont);
				m.add(cmi);
			}
			else if (items[i] instanceof MenuItem)
			{	MenuItem mi = (MenuItem)items[i];
				if (target instanceof ActionListener)
					mi.addActionListener((ActionListener)target);
				m.add(mi);
			}
			else if (items[i] == null)
				m.addSeparator();
		}
		return m;
	}


//// Event Handlers for MouseMotionEvents and MouseEvents...
	// Handle the MouseListener.mouseClicked event.
	public void mousePressed(MouseEvent evt)
	{
		int oldIdx = idxPressed;

		if (idxPressed >= 0)
		{
			idxHighlight = idxPressed;    idxPressed = -1;
			repaint();    return;
		}

		// Which Label[] index is the mouse hovering over?
		idxPressed = -1;    //lblState = 0;
		if (evt.getSource() instanceof Label)
		{
			Label lbl = (Label)evt.getSource();
			for (int i = 0;  i < lblList.length;  i++)
			{
				if (lblList[i] == lbl)
				{
					idxPressed = i;    idxHighlight = -1;    bMenuUp = false;
				}
			}
		}

//		Point evtPoint = evt.getPoint();
//		szInfo = "("+evtPoint.x+","+evtPoint.y+")";
		if (idxPressed != oldIdx)    repaint();
	}

	// Handle the MouseListener.mouseExited event.
	public void mouseExited(MouseEvent evt)
	{
		idxHighlight = -1;    idxPressed = -1;
		repaint();
	}

	// Handle the MouseListener.mouseReleased event.
	public void mouseReleased(MouseEvent evt)
	{
		if (evt.getSource() instanceof Label)    mouseClicked(evt);
	}

	// Handle the MouseMotionListener.mouseMoved event.
	public void mouseMoved(MouseEvent evt)
	{
		int oldIdx = idxHighlight;

		// Which Label[] index is the mouse hovering over?
		idxHighlight = -1;    //lblState = 0;
		if (evt.getSource() instanceof Label)
		{
			Label lbl = (Label)evt.getSource();
			for (int i = 0;  i < lblList.length;  i++)
			{
				if (lblList[i] == lbl  &&  i != idxPressed)
				{
					idxHighlight = i;
					if (idxPressed >= 0)    idxPressed = i;
				}
			}
		}

//		Point evtPoint = evt.getPoint();
//		szInfo = "("+evtPoint.x+","+evtPoint.y+")";
		if (idxHighlight != oldIdx)    repaint();
	}

	// Handle the MouseMotionListener.mouseDragged event.
	public void mouseDragged(MouseEvent evt)
	{
		mouseMoved(evt);
	}

	// Unused MouseEvents.
	// Not using MouseAdapter & MouseMotionAdapter yields 2 less .class files.
	public void mouseClicked(MouseEvent evt)    { }
	public void mouseEntered(MouseEvent evt)    { }
}

⌨️ 快捷键说明

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