dropbutton.java

来自「一个简单的visio程序。」· Java 代码 · 共 297 行

JAVA
297
字号
package webide.views.prop;

import java.awt.Color;
import java.awt.Window;
import java.awt.TextArea;
import java.awt.Component;
import java.beans.PropertyEditor;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import hc.util.MsgBox;
import webide.MainConsole;
import Editor.*;

public class DropButton extends java.awt.Canvas
									implements MouseListener, MouseMotionListener,
											   FocusListener
{
/*--- Private Data Members ----------------------------------------------------------------*/
	private  webide.views.prop.PropSheet Propersheet;
	private  webide.views.prop.PropPanel proppanel;
	private  PropertyEditor              editor;
	private  Window                      win;
	private  PropColorWindow             yc = null;
    private  Component                   body;
	private  int                         buttonadd = 2;
	private  int                         test      = 0;
	private  long                        begintime ;
	private  boolean                     nowDropDown = false;
	
	/* Constructor */
	public DropButton(webide.views.prop.PropPanel proppanel, PropertyEditor pe)
	{
		this.proppanel = proppanel;
		this.Propersheet = this.proppanel.propsheet;
		this.editor = pe;

		yc = new PropColorWindow(editor, 0, 0);
		this.win = yc.getWindow();
    	this.body = pe.getCustomEditor();

		setBackground(Color.lightGray);
		setForeground(Color.black);
		addMouseListener(this);
		addMouseMotionListener(this);
		this.win.addFocusListener(this);
		if( (editor instanceof VBListEditor || editor instanceof ItemListEditor
			|| editor instanceof ListEditor) )
		{
			((java.awt.TextArea)editor).addFocusListener(this);
		}
		this.editor.addPropertyChangeListener(new PropAdaptor(MainConsole.getCurrentFocus(), editor));
	}

/*-----------------------------------------------------------------------------------------*/
/*--- Paint Method ------------------------------------------------------------------------*/	
	public void update(java.awt.Graphics g)
	{ 
		paint(g);
	} 

	public void paint(java.awt.Graphics g)
	{		
		draw(g);
	}

	public void draw(java.awt.Graphics g)
	{
		drawArrow(g, getSize().width, getSize().height);
		drawupbutton();
	}

/*-----------------------------------------------------------------------------------------*/
/*--- Private Method ----------------------------------------------------------------------*/
	private void drawArrow(java.awt.Graphics g, int width, int height) 
	{
		int w=6;
		int h=4;
		int left0 = (width-w-1)/2;
		int top0 = (height-h)/2;
		g.setColor(Color.black);
		for (int i = 0; i < h; i++) 
		{
			g.drawLine(left0+i,top0+i,left0+w-i,top0+i);
		}
	}

	private void drawButton(java.awt.Graphics g,Color c1,Color c2,Color c3,Color c4,int x, int y, int width, int height)
	{
		g.setColor(c1);
		g.drawLine(x,y,x+width,y);
		g.drawLine(x,y,x,y+height);
		g.setColor(c2);
    	g.drawLine(x+1,y+1,x+width-1,y+1);
    	g.drawLine(x+1,y+1,x+1,y+height-1);
		g.setColor(c3);
    	g.drawLine(x+width-1,y+height-1,x+1,y+height-1);
    	g.drawLine(x+width-1,y+height-1,x+width-1,y+1);
		g.setColor(c4);
    	g.drawLine(x+width,y+height,x,y+height);
    	g.drawLine(x+width,y+height,x+width,y);    	
	}

	private void drawupbutton() 
	{
		java.awt.Graphics g = getGraphics();
		if(g != null)
		drawButton(g, Color.lightGray, Color.white, Color.gray, Color.black, 0,0,getSize().width-1,getSize().height-1);
		g.dispose();
	} 
	private void drawdownbutton() 
	{
		java.awt.Graphics g = getGraphics();
		if(g != null)
		drawButton(g, Color.black, Color.gray, new Color(224,224,224), Color.white, 0,0,getSize().width-1,getSize().height-1);
		g.dispose();
	}	

    public boolean getWinVisible()
    {
        return win.isVisible();
    }
    
    public void Dispose()
    {
        win.dispose();
    }
    
	public void newPropertyColorWindow()
	{
		int wid = this.proppanel.getEditWidth();
		int butWidth  = getSize().width;
		int butHeight = getSize().height;
    	int winWidth  = 0;
		int winHeight = 0;
		if(editor instanceof VBListEditor || editor instanceof ListEditor || editor instanceof ItemListEditor)
		{
			winWidth  = wid;
			winHeight = 120;
		}
		else
		{
			winWidth  = 260;
			winHeight = 70;
		}
        int x = getLocationOnScreen().x + butWidth - winWidth;
    	int y = getLocationOnScreen().y + butHeight;
        if(editor instanceof VBListEditor)
		{
            ((VBListEditor)editor).setSize(wid,120);			
        }
		else if(editor instanceof ItemListEditor)
		{
            ((ItemListEditor)editor).setSize(wid,120);        	
        }
		else if(editor instanceof ListEditor)
		{
            ((ListEditor)editor).setSize(wid,120);        	
        }

    	if(!win.isVisible()) 
		{
            if(editor instanceof VBListEditor || editor instanceof ListEditor || editor instanceof ItemListEditor)
			{
                win.setBounds(x, y, wid, 120);
                win.pack();
                win.show();
				((TextArea)editor).requestFocus();
                ((TextArea)editor).setEnabled(true);
            }
			else
			{
                win.setBounds(x, y, 260, 70);
                win.show();
				win.requestFocus();
				for(int i = 0;i<16;i++)
                   ((ColorEditor)editor).label[48+i].setBackground(new Color(((ColorEditor)editor).colorAy[48+i]));
            }
    	}
		else if(win.isVisible()) 
		{
			System.out.println("setvisible false");
            win.setVisible(false);
			if(editor instanceof VBListEditor)
			{
                ((VBListEditor)editor).changeValue();
            }
			else if(editor instanceof ListEditor)
			{
                ((ListEditor)editor).changeValue();
            }
			else if(editor instanceof ItemListEditor)
			{
                ((ItemListEditor)editor).changeValue();
            }
        }
    }

	
/*--- Event -------------------------------------------------------------------------------*/
/*--- Mouse Listener ----------------------------------------------------------------------*/
	public void mouseClicked(MouseEvent e)
	{
		// empty
	}
	
	public void mousePressed(MouseEvent e)
	{
		drawdownbutton();
		long finishtime = e.getWhen();
		if  (finishtime - this.begintime <= 80)
		{
			this.nowDropDown = true;			
		}
		int clickCount = e.getClickCount();
		webide.Wrapper wrap = MainConsole.getCurrentFocus();
		if( !this.nowDropDown)
			newPropertyColorWindow();
		else
			this.nowDropDown = false;
	}

	public void mouseReleased(MouseEvent e)
	{
		drawupbutton();
	}

	public void mouseExited(MouseEvent e)
	{
		drawupbutton();					
	}

	public void mouseEntered(MouseEvent e)
	{
	}

/*-----------------------------------------------------------------------------------------*/
/*--- Mouse Motion Listener ---------------------------------------------------------------*/
	public void mouseMoved(MouseEvent e)
	{
	}
   
    private boolean isInButton = false;
	public void mouseDragged(MouseEvent e)
	{
		int x = e.getX();
		int y = e.getY();
		
		if(x > 0 && x < getSize().width && y > 0 && y < getSize().height)
		{   
			if(!isInButton)
				drawdownbutton() ;
			isInButton = true;
		}
		else
		{
			if(isInButton)
				drawupbutton() ;
			isInButton = false;
		}	
	}	

/*-----------------------------------------------------------------------------------------*/
/*--- Focus Listener ----------------------------------------------------------------------*/
	public void focusGained(FocusEvent e)
	{
	}

	public void focusLost(FocusEvent e)
	{
		this.proppanel.repaint();
		begintime = System.currentTimeMillis();
		test ++;
		if(test%2 == 0)
		{
			if(win.isVisible())
			{
				win.setVisible(false);
				test = 0;
				if(editor instanceof VBListEditor)
				{
					((VBListEditor)editor).changeValue();
				}
				else if(editor instanceof ListEditor)
				{
					((ListEditor)editor).changeValue();
				}
				else if(editor instanceof ItemListEditor)
				{
					((ItemListEditor)editor).changeValue();
				}
			}
		}
	}	
}

⌨️ 快捷键说明

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