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

📄 mathobj.java

📁 基于web的数学公式编辑器
💻 JAVA
字号:

package webmath;

import java.awt.*;
import java.awt.font.*;
import org.w3c.dom.*;

public class Mathobj
{

	public Mathobj()
	{

	}

	static int			   space = 4;
	public Font			  f;
	public FontRenderContext context;
	Graphics2D			   g2;
	static int			   screenoriginx , screenoriginy;

	public void draw(Point p1, Point p2, Graphics g)
	{

	}

	public void setGraphics(Graphics2D g)
	{

		g2 = g;
		context = g2.getFontRenderContext();
	}

	void setxy(Node node)
	{ // 设置node结点自己的坐标

	}

	public void resetxy(Node node)
	{ // 设置node结点的坐标//有孩子结点//不完善

		int miny = 0, maxy = 0, minx = 0, maxx = 0, x1, x2, y1, y2;
		String sx1, sx2, sy1, sy2;
		if (node.getFirstChild().getNodeType() == node.ELEMENT_NODE)
		{
			NodeList nodes = node.getChildNodes();
			sx1 = ((Element) node.getFirstChild()).getAttribute("x1");
			sx2 = ((Element) node.getFirstChild()).getAttribute("x2");
			sy1 = ((Element) node.getFirstChild()).getAttribute("y1");
			sy2 = ((Element) node.getFirstChild()).getAttribute("y2");
			minx = Integer.parseInt(sx1);
			maxx = Integer.parseInt(sx2);
			miny = Integer.parseInt(sy1);
			maxy = Integer.parseInt(sy2);
			for (int i = 1; i < nodes.getLength(); i++)
			{
				Node childnode, sibilingnode;
				childnode = nodes.item(i);
				sx1 = ((Element) childnode).getAttribute("x1");
				sx2 = ((Element) childnode).getAttribute("x2");
				sy1 = ((Element) childnode).getAttribute("y1");
				sy2 = ((Element) childnode).getAttribute("y2");
				x1 = Integer.parseInt(sx1);
				x2 = Integer.parseInt(sx2);
				y1 = Integer.parseInt(sy1);
				y2 = Integer.parseInt(sy2);
				if (x1 < minx)
				{
					minx = x1;
				}
				if (x2 > maxx)
				{
					maxx = x2;
				}
				if (y1 < miny)
				{
					miny = y1;
				}
				if (y2 > maxy)
				{
					maxy = y2;
				}
			}
			// 设置node点的坐标
			((Element) node).setAttribute("x1", "" + minx);
			((Element) node).setAttribute("y1", "" + miny);
			((Element) node).setAttribute("x2", "" + maxx);
			((Element) node).setAttribute("y2", "" + maxy);
		}
	} // resetxy(Node node, NodeList nodes)
} // 类结束

class Mrow extends Mathobj
{ // 布局

	void setxy(Node node)
	{

		resetxy(node);
	}
}

class Mfrac extends Mathobj
{ // 分号

	void setxy(Node node)
	{

		int x1, y1, x2, y2, x12;
		String sx1, sy1, sx2, sy2, sx12;
		Node childnode;
		childnode = node.getFirstChild(); // 分子的坐标
		sx1 = ((Element) childnode).getAttribute("x1");
		sy1 = ((Element) childnode).getAttribute("y1");
		sx12 = ((Element) childnode).getAttribute("x2");
		x1 = Integer.parseInt(sx1);
		y1 = Integer.parseInt(sy1);
		x12 = Integer.parseInt(sx12);
		((Element) node).setAttribute("x1", "" + (x1 - space));
		((Element) node).setAttribute("y1", "" + (y1));
		childnode = node.getLastChild(); // 分母的坐标
		sx2 = ((Element) childnode).getAttribute("x2");
		sy2 = ((Element) childnode).getAttribute("y2");
		x2 = Integer.parseInt(sx2) + 1;
		y2 = Integer.parseInt(sy2);
		if (x12 > x2)
		{
			x2 = x12;
		}
		((Element) node).setAttribute("x2", "" + (x2 + space));
		((Element) node).setAttribute("y2", "" + (y2));
	}

	public void draw(Point p1, Point p2, Graphics g)
	{

		int x1, x2, y1, y2;
		x1 = p1.x;
		x2 = p2.x;
		y1 = p1.y;
		y2 = p2.y;
		g.drawLine(x1, y1 - space, x2, y1 - space);
	}
}

class Mi extends Mathobj
{ // 字符

	void setxy(Node node)
	{

		resetxy(node);
	}
}

class Mo extends Mathobj
{ // 操作符

	void setxy(Node node)
	{

		resetxy(node);
	}
}

class Mn extends Mathobj
{ // 数字

	void setxy(Node node)
	{

		resetxy(node);
	}
}

class Msup extends Mathobj
{ // 上标

	void setxy(Node node)
	{

	}
}

class Msub extends Mathobj
{ // 下标

	void setxy(Node node)
	{

	}
}

class Mroot extends Mathobj
{ // 多次开方

	void setxy(Node node)
	{

		int miny = 0, maxy = 0, minx = 0, maxx = 0, x1, x2, y1, y2;
		String sx1, sx2, sy1, sy2;
		if (node.getFirstChild().getNodeType() == node.ELEMENT_NODE)
		{
			NodeList nodes = node.getChildNodes();
			sx1 = ((Element) node.getFirstChild()).getAttribute("x1");
			sx2 = ((Element) node.getFirstChild()).getAttribute("x2");
			sy1 = ((Element) node.getFirstChild()).getAttribute("y1");
			sy2 = ((Element) node.getFirstChild()).getAttribute("y2");
			minx = Integer.parseInt(sx1);
			maxx = Integer.parseInt(sx2);
			miny = Integer.parseInt(sy1);
			maxy = Integer.parseInt(sy2);
			for (int i = 1; i < nodes.getLength(); i++)
			{
				Node childnode, sibilingnode;
				childnode = nodes.item(i);
				sx1 = ((Element) childnode).getAttribute("x1");
				sx2 = ((Element) childnode).getAttribute("x2");
				sy1 = ((Element) childnode).getAttribute("y1");
				sy2 = ((Element) childnode).getAttribute("y2");
				x1 = Integer.parseInt(sx1);
				x2 = Integer.parseInt(sx2);
				y1 = Integer.parseInt(sy1);
				y2 = Integer.parseInt(sy2);
				if (x1 < minx)
				{
					minx = x1;
				}
				if (x2 > maxx)
				{
					maxx = x2;
				}
				if (y1 < miny)
				{
					miny = y1;
				}
				if (y2 > maxy)
				{
					maxy = y2;
				}
			}
			// 设置node点的坐标
			((Element) node).setAttribute("x1", "" + minx);
			((Element) node).setAttribute("y1", "" + (miny - space));
			((Element) node).setAttribute("x2", "" + (maxx + space));
			((Element) node).setAttribute("y2", "" + (maxy + space));
		}
	}

	public void draw(Point p1, Point p2, Graphics g)
	{

		int x1 = 0, y1 = 0, x2 = 0, y2 = 0, dy;
		x1 = p1.x - 12;
		y1 = p1.y - 4;
		x2 = p2.x + space;
		y2 = p2.y;
		dy = y2 - y1;
		dy = (int) (dy * 0.3);
		g.drawLine(x1 + 10, y1, x2, y1); // 1横线 ------1
		g.drawLine(x1 + 10, y1, x1 + 8, y2); // 斜线 /2
		g.drawLine(x1 + 8, y2, x1 + 6, y2 - dy); // /\/ 2
		g.drawLine(x1 + 6, y2 - dy, x1 + 4, y2); // 43
	}
}

class Msqrt extends Mathobj
{ // 根号开平方

	void setxy(Node node)
	{

		int dx = 0, miny = 10000, x1 = 0, maxy = 0;
		String sx, sy;
		if (node.getFirstChild().getNodeType() == node.ELEMENT_NODE)
		{
			NodeList nodes = node.getChildNodes();
			sy = ((Element) node.getFirstChild()).getAttribute("y1");
			if (!sy.equals(""))
			{
				miny = Integer.parseInt(sy);
			}
			sy = ((Element) node.getFirstChild()).getAttribute("y2");
			if (!sy.equals(""))
			{
				maxy = Integer.parseInt(sy);
			}
			for (int i = 1; i < nodes.getLength(); i++)
			{
				Node childnode, sibilingnode;
				childnode = nodes.item(i - 1);
				sibilingnode = nodes.item(i);
				sy = ((Element) sibilingnode).getAttribute("y1");
				if (!sy.equals(""))
				{
					if (miny > Integer.parseInt(sy))
					{
						miny = Integer.parseInt(sy);
					}
				}
				sy = ((Element) sibilingnode).getAttribute("y2");
				if (!sy.equals(""))
				{
					if (maxy < Integer.parseInt(sy))
					{
						maxy = Integer.parseInt(sy);
					}
				}
			}
			// 设置node点的坐标
			sx = ((Element) node).getAttribute("x1");
			x1 = Integer.parseInt(sx);
			((Element) node).setAttribute("x1", "" + (x1 - 2));
			((Element) node).setAttribute("y1", "" + (miny - 3));
			sx = ((Element) node.getLastChild()).getAttribute("x2");
			x1 = Integer.parseInt(sx);
			((Element) node).setAttribute("x2", "" + (x1 + space));
			((Element) node).setAttribute("y2", "" + (int) (maxy + 3));
		}
	}

	public void draw(Point p1, Point p2, Graphics g)
	{

		int x1 = 0, y1 = 0, x2 = 0, y2 = 0, dy;
		x1 = p1.x;
		y1 = p1.y;
		x2 = p2.x;
		y2 = p2.y;
		dy = y2 - y1;
		dy = (int) (dy * 0.3);
		g.drawLine(x1 + 10, y1, x2, y1); // 1横线 ------1
		g.drawLine(x1 + 10, y1, x1 + 8, y2); // 斜线 /2
		g.drawLine(x1 + 8, y2, x1 + 6, y2 - dy); // /\/ 2
		g.drawLine(x1 + 6, y2 - dy, x1 + 4, y2); // 43
	}
}

class Msubsup extends Mathobj
{ // 字符

	void setxy(Node node)
	{

		resetxy(node);
	}
}

class Munder extends Mathobj
{ // 字符

	void setxy(Node node)
	{

		resetxy(node);
	}
}

class Mover extends Mathobj
{ // 字符

	void setxy(Node node)
	{

		resetxy(node);
	}
}

class Munderover extends Mathobj
{ // 字符

	void setxy(Node node)
	{

		resetxy(node);
	}
}

⌨️ 快捷键说明

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