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

📄 pvborder.java

📁 导出ORACLE数据库对象DDL语句的程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	@param iSet1 set of octal flags for right/bottom lines.
	@param iSet2 set of octal flags for left/top lines.
	@param iRepeat width factor (0..7).
	@param c border color. In case of null, the lightGray color
	is used.
	@see #draw(Graphics,Rectangle,int,Color)
	*/
	public static void draw(Graphics g, Rectangle r, int iSet1, int iSet2, int iRepeat, Color c)
	{
		if(r != null)
		{
			int j, i;
			if(iSet1 == 0) if(iRepeat-- == 0) return;
			iRepeat++;
			if(g == null)
			{
				//-------------------------------
				// adjust rectangle for client area and return
				for(i=1; i < 10; i++) if(((iSet1 >>= 3) & 7) == 0 || ((iSet2 >>= 3) & 7) == 0) break;
				i *= iRepeat;
				if(i > (r.width >>> 1)) i = r.width >>> 1;
				if(i > (r.height >>> 1)) i = r.height >>> 1;
				r.x += i; r.y += i;
				r.width -= (i << 1);
				r.height -= (i << 1);
				return;
			}


			if(c == null) c = Color.lightGray;
			if(iSet1 == 0)
			{
				g.setColor(c);
				while(iRepeat-- > 0)
				{
					focus(g, r.x, r.y, r.width - 1, r.height - 1);
					r.grow(-1, -1);
				}
				return;
			}
			//----------------------------------
			// fill array [7] with shadow colors
			// [4] ==> original color,
			// [0..3] ==> shift to black
			// [5..7] ==> shift to white
			int rgb[] = new int[3], clr[] = new int[6];
			int iR = 170 + ((c.getRed() - 170) * 5 >> 3), iG = 170 + ((c.getGreen() - 170) * 5 >> 3), iB = 170 + ((c.getBlue() - 170) * 5 >> 3);
			//----------------------------------
			for(j=0; j < 6; j++)
			{
				rgb[0] = iR; rgb[1] = iG; rgb[2] = iB;
				for(i=0; i < 3; i++)
				{
					switch(j)
					{
						case 0: rgb[i] = 0; break;
						case 1: rgb[i] = rgb[i] * 3 >>> 2; break;
						//case 2: default color
						case 3: rgb[i] = rgb[i] + ((255 - rgb[i]) << 1) / 6; break;
						case 4: rgb[i] = rgb[i] + ((255 - rgb[i]) << 3) / 11; break;
						case 5: rgb[i] = 255;  break;
					}
				}
				clr[j] = (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];
			}
			//----------------------------------
			// draw border rectangles starting from the
			// most outter and moving to the inside
			for(i=0; i < 10; i++)
			{
				iR = iSet1 & 7; iB = iSet2 & 7;
				if(iR-- == 0 || iB-- == 0) break;
				for(j=0; j < iRepeat; j++)
				{
					if(r.width < 2 || r.height < 2) break;
					rect(g, r, (iR == 6) ? c : new Color(clr[iR]), (iB == 6) ? c : new Color(clr[iB]));
				}
				iSet1 >>= 3; iSet2 >>= 3;
			}
		}
	}
	/**
	Draw 3D rectangle.
	@param g graphics.
	@param r rectangle (on return, it is deflated by 1).
	@param c1 color for right/bottom edges.
	@param c2 color for left/top edges.
	*/
	static void rect(Graphics g, Rectangle r, Color c1, Color c2)
	{
		int iRight = r.x + r.width - 1, iBottom = r.y + r.height - 1;
		//--------------------------------------
		// extract color flag (0..XXX000)
		// draw top-left lines
		g.setColor(c2);
		g.drawLine(r.x, r.y, r.x, iBottom);
		g.drawLine(r.x, r.y, iRight, r.y);
		//--------------------------------------
		// extract color flag (0..000XXX)
		// draw bottom-right lines
		g.setColor(c1);
		g.drawLine(r.x, iBottom, iRight, iBottom);
		g.drawLine(iRight, r.y, iRight, iBottom);
		//--------------------------------------
		// shrink rectangle by 1
		if(r.width > 2) { r.x++; r.width -= 2; }
		if(r.height > 2) { r.y++; r.height -= 2; }
	}
	/**
	Return predifined sets of flags for right/bottom or left/top lines.
	@param s style. Possible values:
		<UL>
		0 - no border<br>
		1..10 - symmetric borders<br>
		11..20 - raised borders<br>
		21..30 - sunken borders<br>
		31..40 - outdent borders<br>
		41..50 - indent borders<br>
		51..60 - picture borders<br>
		61..70 - double raised borders<br>
		71..80 - double sunken borders<br>
		81..90 - bottom-right borders<br>
		91..100 - top-left borders
		</UL>
	@param b location of lines. True - right/bottom, false - left/top.
	@return Set of flags for main constructor.
	@see #draw(Graphics,Rectangle,int,Color)
	*/
	public final static int set(int s, boolean b)
	{
		if((s & 0700000) != 0) return b ? (s & 077777) : ((s >> 15) & 077777);
		if((s &= 0xff) > 40) if(s < 51 || (s > 70 && s < 81) || (s > 90 && s < 101)) { s -= 10; b = !b; }
		switch(s)
		{
			//--------------------------------------------
			// none
			case  0: return 0;
			//--------------------------------------------
			// plane
			case  1: return 7;
			case  2: return 1;
			case  3: return 00000000041;
			case  4: return 00000002631;
			case  5: return 00000365321;
			case  6: return 00001234563;
			case  7: return 00124565421;
			case  8: return 01234566531;
			case  9: return 03566654321;
			case 10: return 01234566653;
			//--------------------------------------------
			// raised
			case 11: return b ? 00000000001 : 00000000006;
			case 12: return b ? 00000000002 : 00000000005;
			case 13: return b ? 00000000021 : 00000000045;
			case 14: return b ? 00000000321 : 00000000565;
			case 15: return b ? 00000003221 : 00000005665;
			case 16: return b ? 00000433221 : 00000466654;
			case 17: return b ? 00000123454 : 00000456664;
			case 18: return b ? 00021777721 : 00046777763;
			case 19: return b ? 03217777321 : 04567777653;
			case 20: return b ? 02177217721 : 05677657756;
			//--------------------------------------------
			// sunken
			case 21: return b ? 00000000006 : 00000000001;
			case 22: return b ? 00000000005 : 00000000002;
			case 23: return b ? 00000000046 : 00000000012;
			case 24: return b ? 00000000456 : 00000000123;
			case 25: return b ? 00000004565 : 00000001223;
			case 26: return b ? 00000034564 : 00000012343;
			case 27: return b ? 00000345654 : 00000433211;
			case 28: return b ? 00004677763 : 00001377713;
			case 29: return b ? 04567777653 : 01227777122;
			case 30: return b ? 06577657765 : 01277127712;
			//--------------------------------------------
			// outdent/(indent inverted)
			case 31: return b ? 00000000052 : 00000000025;
			case 32: return b ? 00000000061 : 00000000016;
			case 33: return b ? 00000000631 : 00000000136;
			case 34: return b ? 00000006331 : 00000001336;
			case 35: return b ? 00000046531 : 00000013564;
			case 36: return b ? 00000464442 : 00000244464;
			case 37: return b ? 00004654321 : 00001234564;
			case 38: return b ? 00046654321 : 00012345664;
			case 39: return b ? 00465444321 : 00123444564;
			case 40: return b ? 04665444321 : 01234445664;
			//--------------------------------------------
			// picture
			case 51: return b ? 04614654321 : 01461234564;
			case 52: return b ? 03632156431 : 01363123464;
			case 53: return b ? 05135134631 : 01515313563;
			case 54: return b ? 04514614631 : 01541641463;
			case 55: return b ? 06441446441 : 01446441446;
			case 56: return b ? 04654614431 : 01344164564;
			case 57: return b ? 04644641441 : 01441464464;
			case 58: return b ? 06446441441 : 01441446446;
			case 59: return b ? 04654314431 : 01234654465;
			case 60: return b ? 03456643141 : 01233446646;
			//--------------------------------------------
			// double raised/(sunken inverted)
			case 61: return b ? 00000000171 : 00000000676;
			case 62: return b ? 00000000271 : 00000000576;
			case 63: return b ? 00000000272 : 00000000575;
			case 64: return b ? 00000001771 : 00000006776;
			case 65: return b ? 00000002771 : 00000005776;
			case 66: return b ? 00000002772 : 00000005775;
			case 67: return b ? 00000017171 : 00000067676;
			case 68: return b ? 00000027271 : 00000057576;
			case 69: return b ? 00000027272 : 00000057575;
			case 70: return b ? 00000171721 : 00000676756;
			//--------------------------------------------
			// bottom-right/(top-left inverted)
			case 81: return b ? 00000000001 : 00000000007;
			case 82: return b ? 00000000002 : 00000000007;
			case 83: return b ? 00000000021 : 00000000077;
			case 84: return b ? 00000000321 : 00000000777;
			case 85: return b ? 00000000321 : 00000000771;
			case 86: return b ? 00000000005 : 00000000007;
			case 87: return b ? 00000000006 : 00000000007;
			case 88: return b ? 00000000056 : 00000000077;
			case 89: return b ? 00000000456 : 00000000777;
			case 90: return b ? 00000000456 : 00000000776;
		}
		return s;
	}
	/**
	Draw dotted (focus) rectangle.
	The current color of graphics is used.
	@param g graphics.
	@param l left edge of rectangle.
	@param t top edge of rectangle.
	@param w width of rectangle.
	@param h height of rectangle.
	*/
	public static void focus(Graphics g, int l, int t, int w, int h)
	{
		int d = w & 1, i = t - 1;
		w += l;
		//-----------------
		// left/right lines
		while((i += 2) <= h + t)
		{
			g.drawLine(l, i, l, i);
			if(i + d <= h + t) g.drawLine(w, i + d, w, i + d);
		}
		//-----------------
		// top/bottom lines
		d = h & 1; h += t; i = l - 1;
		while((i += 2) <= w)
		{
			g.drawLine(i, t, i, t);
			if(i + d <= w) g.drawLine(i + d, h, i + d, h);
		}
	}
	/**
	Draw shadow and adjust rectangle to client area.
	@param g graphics. In case of null, shadow is not painted, but rectangle
	is calculated.
	@param r rectangle.
	@param c shadow color.
	@param back background color.
	@param s the position of the shadow. Possible values:
		<UL>
		0 - no shadow<br>
		1 - right bottom<br>
		2 - left bottom<br>
		3 - left top<br>
		4 - right top
		</UL>
	@param w the width of the shadow.
	*/
	public static void shadow(Graphics g, Rectangle r, Color c, Color back, int s, int w)
	{
		if(s > 0 && r != null)
		{
			if(w > r.width) w = r.width; if(w > r.height) w = r.height;
			if(w > 0)
			{
				r.width -= w; r.height -= w;
				if(g != null)
				{
					int i1 = s & 1, i2 = (s + 1) & 1;
					g.setColor(back);
					g.fillRect(r.x + i1 * r.width, r.y, w, w);
					g.fillRect(r.x + i2 * r.width, r.y + r.height, w, w);
					//------------
					i1 = (2 - (s & 2)) / 2; i2 = (4 - s) / 2;
					g.setColor(c);
					g.fillRect(r.x + i1 * w, r.y + i2 * r.height, r.width, w);
					g.fillRect(r.x + i1 * r.width, r.y + i2 * w, w, r.height);
				}
				if(s > 2) r.y += w;
				if((s & 2) != 0) r.x += w;
			}
		}
	}
}

⌨️ 快捷键说明

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