欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

userwindowlistener.java

PIY(Program It Yourself)是一个基于Java的应用程序开发环境
JAVA
第 1 页 / 共 2 页
字号:
		g.setColor(UserWindowListener.selectedBorderColor);
	
		switch (UserWindowListener.getEditType()) {
			case UserWindowListener.SELECT:  //a component has been selected - draw the border
				if ((UserWindowListener.getInstance().getSelectedComponent() != null) && (window == UserWindowListener.getInstance().getCurrentWindow())) {
					Dimension size = UserWindowListener.getInstance().getSelectedComponent().getSize();
					Point location = getPaneLocation(UserWindowListener.getInstance().getSelectedComponent());
					int x = location.x, y = location.y;
					int width = size.width, height = size.height;	
			
					for (int pos=1; pos<=UserWindowListener.selectedBorderWidth; pos++)
						g.drawRect(x-pos, y-pos, width+2*pos, height+2*pos);
				}
				break;
				
			case UserWindowListener.ADD_COMPONENT: //a bounding box should be drawn
			case UserWindowListener.RESIZE_COMPONENT:
			case UserWindowListener.MOVE_COMPONENT:
				drawRect(g, startx, starty, endx-startx, endy-starty);					
				break;
		}
	}
	
	//When the window is resized, the currently selected component might get resized 
	//(due to the AlignmentLayout) so we need to make sure the bounding box is updated.
	private boolean validating = false;
	public void setBounds(int x, int y, int width, int height) {
		super.setBounds(x, y, width, height);
		if ((UserWindowListener.getInstance().getCurrentWindow() == window) && !validating) {
			//the call to validate below calls this method - we'll get into an 
			//infinite loop if we don't record the fact we're already here 
			validating = true;
			UserWindowListener.getInstance().getCurrentWindow().validate();
			if (UserWindowListener.getInstance().getCurrentWindow().isVisible()) //make sure window visible
				UserWindowListener.getInstance().validateBoundingBox();
			validating = false;
		}
	}
	
	
	//---------------- MouseInput methods ------------------
	public void mouseMoved(MouseEvent e) {
		if ((window == UserWindowListener.getInstance().getCurrentWindow()) && (UserWindowListener.getInstance().getSelectedComponent() != null)) {
		
			if (UserWindowListener.getEditType() == UserWindowListener.SELECT) {
				Rectangle[] selectedRegion = UserWindowListener.getInstance().getSelectedRegion();
				if (selectedRegion[0].contains(e.getPoint())) {
					if (inside != CENTRE) setCursor(new Cursor(Cursor.MOVE_CURSOR));
					inside = CENTRE;
				} else if (selectedRegion[1].contains(e.getPoint())) {
					if (inside != TOP_LEFT) setCursor(new Cursor(Cursor.NW_RESIZE_CURSOR));
					inside = TOP_LEFT;					
				} else if (selectedRegion[2].contains(e.getPoint())) {
					if (inside != TOP_RIGHT) setCursor(new Cursor(Cursor.NE_RESIZE_CURSOR));
					inside = TOP_RIGHT;
				} else if (selectedRegion[3].contains(e.getPoint())) {
					if (inside != BOTTOM_LEFT) setCursor(new Cursor(Cursor.SW_RESIZE_CURSOR));
					inside = BOTTOM_LEFT;
				} else if (selectedRegion[4].contains(e.getPoint())) {
					if (inside != BOTTOM_RIGHT) setCursor(new Cursor(Cursor.SE_RESIZE_CURSOR));
					inside = BOTTOM_RIGHT;
				} else if (selectedRegion[5].contains(e.getPoint())) {
					if (inside != TOP_BORDER) setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));
					inside = TOP_BORDER;
				} else if (selectedRegion[6].contains(e.getPoint())) {
					if (inside != BOTTOM_BORDER) setCursor(new Cursor(Cursor.S_RESIZE_CURSOR));
					inside = BOTTOM_BORDER;
				} else if (selectedRegion[7].contains(e.getPoint())) {
					if (inside != LEFT_BORDER) setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));
					inside = LEFT_BORDER;
				} else if (selectedRegion[8].contains(e.getPoint())) {
					if (inside != RIGHT_BORDER) setCursor(new Cursor(Cursor.E_RESIZE_CURSOR));
					inside = RIGHT_BORDER;
				} else {
					if (inside != NONE) setCursor(Cursor.getDefaultCursor());					
					inside = NONE;
				}
			}
		}
	}
	
	public void mouseDragged(MouseEvent e) {
		switch (UserWindowListener.getEditType()) {
			case UserWindowListener.ADD_COMPONENT:
			case UserWindowListener.RESIZE_COMPONENT:
				switch (getCursor().getType()) {
					case Cursor.DEFAULT_CURSOR:
					case Cursor.NW_RESIZE_CURSOR:
					case Cursor.NE_RESIZE_CURSOR:
					case Cursor.SW_RESIZE_CURSOR:
					case Cursor.SE_RESIZE_CURSOR:
						endx = e.getX();
						endy = e.getY();
						break;
					case Cursor.N_RESIZE_CURSOR:
						starty = e.getY();
						break;
					case Cursor.S_RESIZE_CURSOR:
						endy = e.getY();
						break;
					case Cursor.W_RESIZE_CURSOR:
						startx = e.getX();
						break;
					case Cursor.E_RESIZE_CURSOR:
						endx = e.getX();
						break;
				}
				break;
				
			case UserWindowListener.MOVE_COMPONENT:
				startx = e.getX() - diffx;
				starty = e.getY() - diffy;
				endx = startx + UserWindowListener.getInstance().getSelectedComponent().getWidth();
				endy = starty + UserWindowListener.getInstance().getSelectedComponent().getHeight();
				break;	
		}
		repaint();

	}
	
	public void mouseClicked(MouseEvent e) {
		Container clickedIn = ((Component)e.getSource()).getParent().getParent();

		if (clickedIn instanceof UserWindow) clickedIn = ((UserWindow)clickedIn).getContentPane();

		int x = e.getX(), y = e.getY();
				
		if (UserWindowListener.getEditType() == UserWindowListener.ADD_COMPONENT) {
			Component clickPlace = SwingUtilities.getDeepestComponentAt(clickedIn, startx, starty);
			while (!(clickPlace instanceof UserContainer)) { clickPlace = clickPlace.getParent(); }

			JComponent component = PIY.getInstance().addComponent((UserContainer)clickPlace, null, x, y, 100, 32); //add the component to this window
			UserWindowListener.setEditType(UserWindowListener.SELECT);
			UserWindowListener.getInstance().selectComponent(component);				
		} else if (UserWindowListener.getEditType() == UserWindowListener.SELECT) {
			Component selected = SwingUtilities.getDeepestComponentAt(clickedIn, x, y);
			if (selected == clickedIn) { //selected the window
				selected = null; 
				UserWindowListener.getInstance().setCurrentWindow((JFrame)((Component)e.getSource()).getParent().getParent());
			} else if (!(selected instanceof UserComponent)) {
				//this can occur in compound user components - the user selects a "part" of the component
				//but the actual user component just contains that part (as in a text pane)
				while (!(selected instanceof UserComponent)) selected = selected.getParent();
			}
			
			UserWindowListener.getInstance().selectComponent(selected);
		}
	}
	
	public void mouseEntered(MouseEvent e) { }
	public void mouseExited(MouseEvent e) { }
	
	public void mousePressed(MouseEvent e) {
		clickedIn = ((Component)e.getSource()).getParent().getParent();
		if (clickedIn instanceof UserWindow) clickedIn = ((UserWindow)clickedIn).getContentPane();

		switch (UserWindowListener.getEditType()) {
			case UserWindowListener.SELECT:
				if (UserWindowListener.getInstance().getSelectedComponent() != null) {
					Point pos = getPaneLocation(UserWindowListener.getInstance().getSelectedComponent());

					if (getCursor().getType() != Cursor.getDefaultCursor().getType()) UserWindowListener.setEditType(UserWindowListener.RESIZE_COMPONENT);
				
					switch (getCursor().getType()) {
						case Cursor.NW_RESIZE_CURSOR:
							startx = pos.x + UserWindowListener.getInstance().getSelectedComponent().getWidth();
							starty = pos.y + UserWindowListener.getInstance().getSelectedComponent().getHeight();
							break;
						case Cursor.NE_RESIZE_CURSOR:
							startx = pos.x;
							starty = pos.y + UserWindowListener.getInstance().getSelectedComponent().getHeight();
							break;
						case Cursor.SW_RESIZE_CURSOR:
							startx = pos.x + UserWindowListener.getInstance().getSelectedComponent().getWidth();
							starty = pos.y;
							break;
						case Cursor.SE_RESIZE_CURSOR:
							startx = pos.x;
							starty = pos.y;
							break;		
						case Cursor.N_RESIZE_CURSOR:
						case Cursor.S_RESIZE_CURSOR:
						case Cursor.E_RESIZE_CURSOR:
						case Cursor.W_RESIZE_CURSOR:
							startx = pos.x;
							starty = pos.y;
							endx = pos.x + UserWindowListener.getInstance().getSelectedComponent().getWidth();
							endy = pos.y + UserWindowListener.getInstance().getSelectedComponent().getHeight();
							break;							
						case Cursor.MOVE_CURSOR:
							startx = pos.x;
							starty = pos.y;
							endx = pos.x + UserWindowListener.getInstance().getSelectedComponent().getWidth();
							endy = pos.y + UserWindowListener.getInstance().getSelectedComponent().getHeight();
							diffx = e.getX() - startx;
							diffy = e.getY() - starty;
							UserWindowListener.setEditType(UserWindowListener.MOVE_COMPONENT);
							break;				
					}						
				}					
				break;

			case UserWindowListener.ADD_COMPONENT:
				startx = e.getX();
				starty = e.getY();
				break;
		}
	}
	
	public void mouseReleased(MouseEvent e) {

		//get the point relative to its parent container
		if (UserWindowListener.getInstance().getSelectedComponent() != null) clickedIn = UserWindowListener.getInstance().getSelectedComponent().getParent();
		Point start = getPointLocation(clickedIn, new Point(startx, starty));

		//sort out coordinates/size
		int width = endx - startx;
		int height = endy - starty;
		
		if (width < 0) { 
			width = -width;
			start.x -= width;	
		}
		
		if (height < 0) {
			height = -height;
			start.y -= height;
		}


		switch (UserWindowListener.getEditType()) {
			case UserWindowListener.ADD_COMPONENT:
				Component clickPlace = SwingUtilities.getDeepestComponentAt(clickedIn, startx, starty);
				while (!(clickPlace instanceof UserContainer)) {
					clickPlace = clickPlace.getParent();
				}

				start = getPointLocation((Container)clickPlace, start);

				//add component at specified point to the specified container
				JComponent component = PIY.getInstance().addComponent((UserContainer)clickPlace, null, start.x, start.y, width, height); //add the component to this window

				//return to the select mode (the selectComponent method informs PIY of this).
				UserWindowListener.getInstance().selectComponent(component);				

				break;
		
			case UserWindowListener.RESIZE_COMPONENT:
			case UserWindowListener.MOVE_COMPONENT:

				UserWindowListener.getInstance().getSelectedComponent().setBounds(start.x, start.y, width, height);
				setCursor(Cursor.getDefaultCursor());
				inside = -1;
				if (UserWindowListener.getInstance().getCurrentWindow() != null) UserWindowListener.getInstance().getCurrentWindow().validate();
				UserWindowListener.getInstance().selectComponent(UserWindowListener.getInstance().getSelectedComponent());
				repaint();			
				break;
		}
		
		//reset coords
		startx = 0; starty = 0; endx = 0; endy=0; 
		UserWindowListener.setEditType(UserWindowListener.SELECT);
		
		//notify the project handler that we've made a change
		ProjectHandler.getInstance().projectChanged();
	}
					
}


⌨️ 快捷键说明

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