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

📄 panel1.java

📁 基于web的数学公式编辑器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
					setxy(childnode, originx, originy);
					msubsx = ((Element) childnode).getAttribute("x2");
					msubsy = ((Element) childnode).getAttribute("y2");
					msubx1 = Integer.parseInt(msubsx);
					msuby1 = Integer.parseInt(msubsy);
					msupsy = ((Element) childnode).getAttribute("y1");
					msupx1 = msubx1;
					msupy1 = Integer.parseInt(msupsy);
					childnode = node.getLastChild(); // 下限部分
					setxy(childnode, originx, originy);
					msupsy = ((Element) childnode).getAttribute("y2");
					msupy2 = Integer.parseInt(msupsy);
					msupsx = ((Element) childnode).getAttribute("x1");
					msupx2 = Integer.parseInt(msupsx);
					movenodexy(childnode, 0, msupy1 - msupy2);
					childnode = node.getFirstChild().getNextSibling(); // 下标部分
					setxy(childnode, originx, originy);
					msubsy = ((Element) childnode).getAttribute("y1");
					msuby2 = Integer.parseInt(msubsy);
					msubsx = ((Element) childnode).getAttribute("x1");
					msubx2 = Integer.parseInt(msubsx);
					movenodexy(childnode, 0, msuby1 - msuby2);
				}
			}
			else if (node.getNodeName() == "mtable")
			{ // 为矩阵分配坐标
				int rowcount, tiercount;
				rowcount = Integer.parseInt(((Element) node).getAttribute("rowcount"));
				tiercount = Integer.parseInt(((Element) node).getAttribute("tiercount"));
				NodeList mtnodes = node.getChildNodes();
				Node mtchildnode;
				for (int i = 0; i < rowcount; i++)
				{
					setxy(mtnodes.item(i), originx, originy);
				}
				int[] row = new int[rowcount]; // 行高
				int[] tier = new int[tiercount]; // 列宽
				int maxwidth = 0, maxheigh = 0;
				int width = 0, heigh = 0;
				String mtsx1, mtsx2, mtsy1, mtsy2;
				int mtx1 = 0, mtx2 = 0, mty1 = 0, mty2 = 0;
				NodeList mtnodes2;
				for (int i = 0; i < rowcount; i++)
				{ // 行
					mtnodes = node.getChildNodes();
					mtchildnode = mtnodes.item(i);
					mtnodes2 = mtchildnode.getChildNodes();
					for (int j = 0; j < tiercount; j++)
					{ // 列
						maxheigh = row[i];
						maxwidth = tier[j];
						Element mtchildnode2 = (Element) mtnodes2.item(j);
						mtsx1 = mtchildnode2.getAttribute("x1");
						mtsy1 = mtchildnode2.getAttribute("y1");
						mtsx2 = mtchildnode2.getAttribute("x2");
						mtsy2 = mtchildnode2.getAttribute("y2");
						mtx1 = Integer.parseInt(mtsx1);
						mtx2 = Integer.parseInt(mtsx2);
						mty1 = Integer.parseInt(mtsy1);
						mty2 = Integer.parseInt(mtsy2);
						width = mtx2 - mtx1;
						heigh = mty2 - mty1;
						if (width > maxwidth)
						{
							maxwidth = width;
							tier[j] = maxwidth;
						}
						if (heigh > maxheigh)
						{
							maxheigh = heigh;
							row[i] = maxheigh;
						}
					}
				}
				mtnodes = node.getChildNodes();
				for (int i = 0; i < rowcount; i++)
				{
					mtchildnode = mtnodes.item(i);
					mtnodes2 = mtchildnode.getChildNodes();
					for (int j = 0; j < tiercount; j++)
					{
						int mtdx = 0, mtdy = 0;
						for (int h = 0; h < i; h++)
						{
							mtdy = mtdy + row[h] + rowdistance;
						}
						for (int k = 0; k < j; k++)
						{
							mtdx = mtdx + tier[k] + tierdistance;
						}
						int mtx = originx + mtdx;
						int mty = originy + mtdy;
						setxy(mtnodes2.item(j), mtx, mty);
					}
				}
				Mrow mrow = new Mrow();
				for (int i = 0; i < rowcount; i++)
				{
					mrow.setxy(mtnodes.item(i));
					Element mtchildnode2 = (Element) mtnodes.item(i);
					mtsx1 = mtchildnode2.getAttribute("x1");
					mtsy1 = mtchildnode2.getAttribute("y1");
					mtx1 = Integer.parseInt(mtsx1);
					mty1 = Integer.parseInt(mtsy1);
					int mtdy5 = 0;
					for (int h = 0; h < i; h++)
					{
						mtdy5 = mtdy5 + row[h] + rowdistance;
					}
					int mty5 = originy + mtdy5;
					movenodexy(mtchildnode2, 0, mty5 - mty1);
					mrow.setxy(mtnodes.item(i));
					mty5 = 0;
					mtdy5 = 0;
				}
				for (int i = 0; i < rowcount; i++)
				{
					mtchildnode = mtnodes.item(i);
					mtnodes2 = mtchildnode.getChildNodes();
					for (int j = 0; j < tiercount; j++)
					{
						mtx1 = 0;
						for (int k = 0; k < j; k++)
						{
							mtx1 = mtx1 + tier[k] + tierdistance;
						}
						mtx2 = mtx1 + tier[j];
						this.movetomidle(mtnodes2.item(j), mtx1, mtx2);
					}
				}
			}
			else
			{ // 为mrow,mtd,mtr,mn,mo,mi节点树设置它的坐标
				nodes = node.getChildNodes();
				for (int i = 0; i < nodes.getLength(); i++)
				{ // 对node结点的所有子结点设置坐标
					Node node2 = (Node) nodes.item(i);
					if (node2.getNodeType() == node.ELEMENT_NODE)
					{ // 对ELEMENT_NODE类型的子结点设置坐标
						if (i == 0)
						{ // 为第一个子结点设置原点
							sx = ((Element) node).getAttribute("x1");
							sy = ((Element) node).getAttribute("baseliney");
							originx = Integer.parseInt(sx);
							originy = Integer.parseInt(sy);
						}
						else
						{ // 为非第一个结点设置基线
							Node childnode = nodes.item(i - 1);
							String nodename;
							nodename = childnode.getNodeName();
							int dx, dy;
							int basex1, basex2, basey1, basey2;
							String basesx1, basesx2, basesy1, basesy2;
							basesx2 = ((Element) childnode).getAttribute("x2");
							basesy1 = ((Element) childnode).getAttribute("baseliney");
							basex2 = Integer.parseInt(basesx2);
							basey1 = Integer.parseInt(basesy1);
							originx = basex2;
							originy = basey1;
						}
						setxy(nodes.item(i), originx, originy);
					}
					else if (nodes.item(i).getNodeType() == node.TEXT_NODE)
					{ // 对TEXT_NODE类型的子结点设置坐标
						sx = ((Element) node).getAttribute("x1");
						sy = ((Element) node).getAttribute("y1");
						originx = Integer.parseInt(sx);
						originy = Integer.parseInt(sy);
						setxy(node2, originx, originy);
					}
					else if (nodes.item(i).getNodeType() == Node.ENTITY_REFERENCE_NODE)
					{ // 对实体参考类型的子结点设置坐标
						sx = ((Element) node).getAttribute("x1");
						sy = ((Element) node).getAttribute("y1");
						originx = Integer.parseInt(sx);
						originy = Integer.parseInt(sy);
						setxy(node2, originx, originy);
					}
				}
			}
			String name = node.getNodeName(); // 根据node结点的子结点设置它自己的坐标
			if (name.equals("mrow"))
			{
				Mrow mrow = new Mrow();
				mrow.setxy(node);
			}
			else if (name.equals("mfrac"))
			{ // 为分号设置它自己的坐标
				Mfrac mfrac = new Mfrac();
				mfrac.setxy(node);
				int dx = 0, dy = 0;
				int childx1, childx2, parentx;
				String schildx1, schildx2, sparentx;
				schildx1 = ((Element) node.getFirstChild()).getAttribute("x2");
				schildx2 = ((Element) node.getLastChild()).getAttribute("x2");
				sparentx = ((Element) node).getAttribute("x2");
				childx1 = Integer.parseInt(schildx1);
				childx2 = Integer.parseInt(schildx2);
				parentx = Integer.parseInt(sparentx);
				dx = parentx - childx1;
				if (dx > 2)
				{
					movenodexy(node.getFirstChild(), dx / 2 - space / 2, dy);
				}
				dx = parentx - childx2;
				if (dx > 2)
				{
					movenodexy(node.getLastChild(), dx / 2 - space / 2, dy);
				}
			}
			else if (name.equals("mi"))
			{
				Mi mi = new Mi();
				mi.setGraphics(g2);
				mi.setxy(node);
			}
			else if (name.equals("mo"))
			{
				Mo mo = new Mo();
				mo.setGraphics(g2);
				mo.setxy(node);
			}
			else if (name.equals("mn"))
			{
				Mn mn = new Mn();
				mn.setGraphics(g2);
				mn.setxy(node);
			}
			else if (name.equals("msqrt"))
			{ // 平方根
				Msqrt msqrt = new Msqrt();
				msqrt.setGraphics(g2);
				msqrt.setxy(node);
			}
			else if (name.equals("msubsup"))
			{
				Msubsup msubsup = new Msubsup();
				msubsup.setGraphics(g2);
				msubsup.setxy(node);
			}
			else if (name.equals("mroot"))
			{
				Mroot mroot = new Mroot();
				mroot.setGraphics(g2);
				mroot.setxy(node);
			}
			else if (name.equals("munder"))
			{
				Munder munder = new Munder();
				munder.setGraphics(g2);
				munder.setxy(node);
				movetomidle(node);
			}
			else if (name.equals("mover"))
			{
				Munder munder = new Munder();
				munder.setGraphics(g2);
				munder.setxy(node);
				movetomidle(node);
			}
			else if (name.equals("munderover"))
			{
				Munder munder = new Munder();
				munder.setGraphics(g2);
				munder.setxy(node);
				movetomidle(node);
			}
			else if (name.equals("mtable"))
			{
				Mrow mrow = new Mrow();
				mrow.setxy(node);
				String mtsy1, mtsy2;
				int mty1, mty2;
				int dy;
				mtsy1 = ((Element) node).getAttribute("y1");
				mtsy2 = ((Element) node).getAttribute("y2");
				mty1 = Integer.parseInt(mtsy1);
				mty2 = Integer.parseInt(mtsy2);
				dy = -(mty2 - mty1) / 2;
				movenodexy(node, 0, dy);
			}
			else
			{
				Mrow mrow = new Mrow();
				mrow.setxy(node);
			}
			nodes = node.getChildNodes();
			for (int i = 0; i < nodes.getLength(); i++)
			{
				Node childnode = nodes.item(i);
				if (childnode.getNodeName() == "mo")
				{
					if (childnode.getFirstChild().getNodeType() == Node.TEXT_NODE)
					{
						String nodevalue;
						nodevalue = childnode.getFirstChild().getNodeValue();
						if (nodevalue.equals("{") || nodevalue.equals("}") || nodevalue.equals("(") || nodevalue.equals(")") || nodevalue.equals("|") || nodevalue.equals("[")
								|| nodevalue.equals("]"))
						{
							changexy(node, originy);
						}
					}
				}
			}
		}
		else
		{ // 没有子结点
			if (node.getNodeType() == node.ELEMENT_NODE)
			{
				((Element) node).setAttribute("x1", "" + originx);
				((Element) node).setAttribute("y1", "" + (originy - (int) (stringy * bili)));
				repaint();
				// setbound("bb");
				int orx = originx + (int) stringheight + 1; // 留个空白
				int ory = originy + (int) (stringheight - stringy * bili) + 1;
				((Element) node).setAttribute("x2", "" + orx);
				((Element) node).setAttribute("y2", "" + ory);
			}
			else if (node.getNodeType() == node.TEXT_NODE)
			{
				int x1, y1, y2, x2;
				String value = node.getNodeValue();
				if (value.equals("{") || value.equals("}") || value.equals("(") || value.equals(")") || value.equals("|") || value.equals("[") || value.equals("]"))
				{
					y1 = originy - (int) (stringy * bili);
					x2 = originx + 10;
					y2 = originy + (int) (stringheight - stringy * bili);
					String sx2;
					sx2 = "" + y1;
					((Element) node.getParentNode()).setAttribute("y1", sx2);
					sx2 = "" + x2;
					((Element) node.getParentNode()).setAttribute("x2", sx2);
					sx2 = "" + y2;
					((Element) node.getParentNode()).setAttribute("y2", sx2);
				}
				else
				{
					setbound(node.getNodeValue());
					y1 = originy - (int) (stringy * bili);
					x2 = originx + (int) stringwidth + 1;
					y2 = originy + (int) (stringheight - stringy * bili);
					String sx2;
					sx2 = "" + y1;
					((Element) node.getParentNode()).setAttribute("y1", sx2);
					sx2 = "" + x2;
					((Element) node.getParentNode()).setAttribute("x2", sx2);
					sx2 = "" + y2;
					((Element) node.getParentNode()).setAttribute("y2", sx2);
				}
			}
			else if (node.getNodeType() == Node.ENTITY_REFERENCE_NODE)
			{
				int x1, y1, y2, x2;
				String reference, referencename;
				referencename = node.getNodeName();
				reference = this.getsymbolbyname(referencename);
				setbound(reference);
				y1 = originy - (int) (stringy * bili);
				x2 = originx + (int) stringwidth + 1;
				y2 = originy + (int) (stringheight - stringy * bili);
				String sx2;
				sx2 = "" + y1;
				((Element) node.getParentNode()).setAttribute("y1", sx2);
				sx2 = "" + x2;
				((Element) node.getParentNode()).setAttribute("x2", sx2);
				sx2 = "" + y2;
				((Element) node.getParentNode()).setAttribute("y2", sx2);
			}
		}
	}

	private void showscreen(Graphics2D g2)
	{

		printChildNode2(this.copyroot, g2);
	}

	private void printChildNode2(Node temp, Graphics2D g2)
	{ // 输出temp结点的子结点

		if (temp.hasChildNodes())
		{
			String nodename = temp.getNodeName();
			if (nodename == "msup" && issup == 0)
			{
				if (issmallsize == 1)
				{
					setFontSize(fontsize2 - reducesize);
					g2.setFont(f);
				}
				else
				{
					setFontSize(fontsize2);
					g2.setFont(f);
				}
				printChildNode2(temp.getFirstChild(), g2);
				issup = 1;
				issmallsize = 1;
				setFontSize(fontsize2 - reducesize);
				g2.setFont(f);
				printChildNode2(temp.getLastChild(), g2);
				issup = 0;
				setissmallsize();
				if (issmallsize == 0)
				{
					setFontSize(fontsize2);
					g2.setFont(f);
				}
			}
			else if (nodename == "msub" && issub == 0)
			{
				if (issmallsize == 1)
				{
					setFontSize(fontsize2 - reducesize);
					g2.setFont(f);
				}
				else
				{
					setFontSize(fontsize2);
					g2.setFont(f);
				}
				printChildNode2(temp.getFirstChild(), g2);
				issub = 1;
				issmallsize = 1;

⌨️ 快捷键说明

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