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

📄 panel1.java

📁 基于web的数学公式编辑器
💻 JAVA
📖 第 1 页 / 共 5 页
字号:

package webmath;

import java.io.*;
import javax.xml.parsers.*;
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import javax.swing.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import java.util.Vector;

public class Panel1 extends JPanel
{

	Font			  f;
	FontRenderContext context;
	double			stringwidth = 6d , stringheight = 15d , stringy = 8;
	double			bili		= 2 / 3d;
	Rectangle2D	   bounds;
	String			daima	   = new String("<math><mrow></mrow></math>");
	String			viewdaima   = new String("");
	String			inputdaima;
	String			nameSpace   = "m";
	static int		space;
	float			 fontsize , fontsize2 , reducesize = 5f , referencesize = 5f;
	int			   in		  = 14;
	int			   screenoriginx = 10 , screenoriginy = 300;
	int			   isbefor	   = 0;
	int			   issmallsize   = 0 , issup = 0 , issub = 0 , issubsup = 0 , isroot = 0 , isunder = 0 , isover = 0 , isunderover = 0;
	int			   copyoriginx , copyoriginy;
	Node			  root , copyroot;
	Node			  insertnode;
	Boolean		   isin		  = Boolean.FALSE;
	Rectangle		 rect		  = new Rectangle();
	Vector			symbolvector  = new Vector();
	String			symbol		= "";
	String			symbol2	   = "";
	Graphics2D		g2;
	Document		  document;
	SymbolFrame	   symbolframe   = new SymbolFrame(this);
	Matrixparameter   matrix		= new Matrixparameter(this);
	int			   rowdistance   = 10 , tierdistance = 10;
	Webmath		   webmath;

	public Panel1(Webmath webmath)
	{

		this.webmath = webmath;
		symbolframe.setBounds(100, 100, 430, 420);
		initdocument();
		yuantoview();
		insertnode = root.getFirstChild();
		Mathobj mathobj = new Mathobj();
		space = mathobj.space;
		mathobj.screenoriginx = this.screenoriginx;
		mathobj.screenoriginy = this.screenoriginy;
		setrect();
		MathmlString mathmlstring = new MathmlString(this);
		f = new Font("Monospaced", Font.PLAIN, 15);
		fontsize = f.getSize();
		fontsize2 = f.getSize();
		initsymbolvecter();
	}

	public void paint(Graphics g)
	{

		g2 = (Graphics2D) g;
		super.paint(g);
		g2.setFont(f);
		/*
         * viewdaima = getXML(root); g2.drawString(viewdaima, 0, 50); g2.drawString(insertnode.getNodeName() + " size=" + f.getSize(), 0, 20); for (int i = 0; i < 20; i++) {
         * g2.drawLine(0, 200 + i * 10, 5, 200 + i * 10); }
         */
		showscreen(g2);
		drawcursor();
	}

	public void keydown(char s)
	{

		char achar[] = new char[2];
		achar[0] = s;
		String daima2 = new String(achar, 0, 1);
		if (daima2.equals("0") | daima2.equals("1") | daima2.equals("2") | daima2.equals("3") | daima2.equals("4") | daima2.equals("5") | daima2.equals("6") | daima2.equals("7")
				| daima2.equals("8") | daima2.equals("9"))
		{
			if (insertnode.getNodeName() == "mrow" || insertnode.getNodeName() == "mtd")
			{
				Element mn;
				Node parentnode, textnode;
				mn = (Element) document.createElement("mn");
				parentnode = insertnode;
				parentnode.appendChild(mn);
				textnode = document.createTextNode(daima2);
				mn.appendChild(textnode);
				insertnode = mn;
			}
			else
			{
				Element mn;
				Node parentnode, textnode, nextnode;
				mn = (Element) document.createElement("mn");
				parentnode = insertnode.getParentNode();
				parentnode.appendChild(mn);
				textnode = document.createTextNode(daima2);
				mn.appendChild(textnode);
				parentnode = insertnode.getParentNode();
				if (isbefor == 0)
				{
					nextnode = insertnode.getNextSibling();
				}
				else
				{
					nextnode = insertnode;
				}
				if (nextnode != mn)
				{
					parentnode.insertBefore(mn, nextnode);
				}
				insertnode = mn;
			}
		}
		else if (daima2.equals("+") | daima2.equals("-") | daima2.equals("*") | daima2.equals("/") | daima2.equals("=") | daima2.equals("{") | daima2.equals("}")
				| daima2.equals("(") | daima2.equals(")") | daima2.equals("|") | daima2.equals("[") | daima2.equals("]"))
		{
			if (insertnode.getNodeName() == "mrow" || insertnode.getNodeName() == "mtd")
			{
				Element mn;
				Node parentnode, textnode;
				mn = (Element) document.createElement("mo");
				parentnode = insertnode;
				parentnode.appendChild(mn);
				textnode = document.createTextNode(daima2);
				mn.appendChild(textnode);
				insertnode = mn;
			}
			else
			{
				Element mn;
				Node parentnode, textnode, nextnode;
				mn = (Element) document.createElement("mo");
				parentnode = insertnode.getParentNode();
				parentnode.appendChild(mn);
				textnode = document.createTextNode(daima2);
				mn.appendChild(textnode);
				parentnode = insertnode.getParentNode();
				if (isbefor == 0)
				{
					nextnode = insertnode.getNextSibling();
				}
				else
				{
					nextnode = insertnode;
				}
				if (nextnode != mn)
				{
					parentnode.insertBefore(mn, nextnode);
				}
				insertnode = mn;
			}
		}
		else
		{
			if (insertnode.getNodeName() == "mrow" || insertnode.getNodeName() == "mtd")
			{
				Element mn;
				Node parentnode, textnode;
				mn = (Element) document.createElement("mi");
				parentnode = insertnode;
				parentnode.appendChild(mn);
				textnode = document.createTextNode(daima2);
				mn.appendChild(textnode);
				insertnode = mn;
			}
			else
			{
				Element mn;
				Node parentnode, textnode, nextnode;
				mn = (Element) document.createElement("mi");
				parentnode = insertnode.getParentNode();
				parentnode.appendChild(mn);
				textnode = document.createTextNode(daima2);
				mn.appendChild(textnode);
				parentnode = insertnode.getParentNode();
				if (isbefor == 0)
				{
					nextnode = insertnode.getNextSibling();
				}
				else
				{
					nextnode = insertnode;
				}
				if (nextnode != mn)
				{
					parentnode.insertBefore(mn, nextnode);
				}
				insertnode = mn;
			}
		}
		isbefor = 0;
		requestFocus();
		yuantoview();
		setrect();
		repaint();
	}

	public void buttondown(int n)
	{

		String daima2;
		if (n == 0)
		{
			MathmlString mathstring = new MathmlString(this);
			String out = mathstring.getmathmlcode();
			System.out.println(out);
			System.out.println(viewdaima);
		}
		else if (n == 1)
		{ // 上标<msup><mrow></mrow><mrow></mrow></msup>
			if (insertnode.getNodeName() == "mrow" || insertnode.getNodeName() == "mtd")
			{
				Node parentnode, nextnode;
				Element mfrac = (Element) document.createElement("msup");
				Element mrow = (Element) document.createElement("mrow");
				Element mrow2 = (Element) document.createElement("mrow");
				parentnode = insertnode;
				parentnode.appendChild(mfrac);
				mfrac.appendChild(mrow);
				mfrac.appendChild(mrow2);
				insertnode = mrow;
			}
			else
			{
				Node parentnode, nextnode;
				Element mfrac = (Element) document.createElement("msup");
				Element mrow = (Element) document.createElement("mrow");
				Element mrow2 = (Element) document.createElement("mrow");
				parentnode = document.createElement("cc");
				parentnode = insertnode.getParentNode();
				parentnode.appendChild(mfrac);
				mfrac.appendChild(mrow);
				mfrac.appendChild(mrow2);
				if (isbefor == 0)
				{
					nextnode = insertnode.getNextSibling();
				}
				else
				{
					nextnode = insertnode;
				}
				if (nextnode != mfrac)
				{
					parentnode.insertBefore(mfrac, nextnode);
				}
				insertnode = mrow;
			}
		}
		else if (n == 2)
		{ // 下标<msub><mrow></mrow><mrow></mrow></msub>
			if (insertnode.getNodeName() == "mrow" || insertnode.getNodeName() == "mtd")
			{
				Node parentnode, nextnode;
				Element mfrac = (Element) document.createElement("msub");
				Element mrow = (Element) document.createElement("mrow");
				Element mrow2 = (Element) document.createElement("mrow");
				parentnode = insertnode;
				parentnode.appendChild(mfrac);
				mfrac.appendChild(mrow);
				mfrac.appendChild(mrow2);
				insertnode = mrow;
			}
			else
			{
				Node parentnode, nextnode;
				Element mfrac = (Element) document.createElement("msub");
				Element mrow = (Element) document.createElement("mrow");
				Element mrow2 = (Element) document.createElement("mrow");
				parentnode = document.createElement("cc");
				parentnode = insertnode.getParentNode();
				parentnode.appendChild(mfrac);
				mfrac.appendChild(mrow);
				mfrac.appendChild(mrow2);
				if (isbefor == 0)
				{
					nextnode = insertnode.getNextSibling();
				}
				else
				{
					nextnode = insertnode;
				}
				if (nextnode != mfrac)
				{
					parentnode.insertBefore(mfrac, nextnode);
				}
				insertnode = mrow;
			}
		}
		else if (n == 3)
		{ // 分数<mfrac><mrow>分子</mrow><mrow>分母</mrow></mfrac>
			if (insertnode.getNodeName() == "mrow" || insertnode.getNodeName() == "mtd")
			{
				Node parentnode, nextnode;
				Element mfrac = (Element) document.createElement("mfrac");
				Element mrow = (Element) document.createElement("mrow");
				Element mrow2 = (Element) document.createElement("mrow");
				parentnode = insertnode;
				parentnode.appendChild(mfrac);
				mfrac.appendChild(mrow);
				mfrac.appendChild(mrow2);
				insertnode = mrow;
			}
			else
			{
				Node parentnode, nextnode;
				Element mfrac = (Element) document.createElement("mfrac");
				Element mrow = (Element) document.createElement("mrow");
				Element mrow2 = (Element) document.createElement("mrow");
				parentnode = document.createElement("cc");
				parentnode = insertnode.getParentNode();
				parentnode.appendChild(mfrac);
				mfrac.appendChild(mrow);
				mfrac.appendChild(mrow2);
				if (isbefor == 0)
				{
					nextnode = insertnode.getNextSibling();
				}
				else
				{
					nextnode = insertnode;
				}
				if (nextnode != mfrac)
				{
					parentnode.insertBefore(mfrac, nextnode);
				}
				insertnode = mrow;
			}
		}
		else if (n == 4)
		{ // 平方根<msqrt><mrow></mrow></msqrt>
			if (insertnode.getNodeName() == "mrow" || insertnode.getNodeName() == "mtd")
			{
				Node parentnode, nextnode;
				Element msqrt = (Element) document.createElement("msqrt");
				Element mrow = (Element) document.createElement("mrow");
				parentnode = document.createElement("cc");
				parentnode = insertnode;
				parentnode.appendChild(msqrt);
				msqrt.appendChild(mrow);
				insertnode = mrow;
			}
			else
			{
				Node parentnode, nextnode;
				Element msqrt = (Element) document.createElement("msqrt");
				Element mrow = (Element) document.createElement("mrow");
				parentnode = document.createElement("cc");
				parentnode = insertnode.getParentNode();
				parentnode.appendChild(msqrt);
				msqrt.appendChild(mrow);
				if (isbefor == 0)
				{
					nextnode = insertnode.getNextSibling();
				}
				else
				{
					nextnode = insertnode;
				}
				if (nextnode != msqrt)
				{
					parentnode.insertBefore(msqrt, nextnode);
				}
				insertnode = mrow;
			}
		}
		else if (n == 5)
		{ // 求根<mroot><mrow></mrow><mrow></mrow></mroot>
			if (insertnode.getNodeName() == "mrow" || insertnode.getNodeName() == "mtd")
			{
				Node parentnode, nextnode;
				Element mfrac = (Element) document.createElement("mroot");
				Element mrow = (Element) document.createElement("mrow");
				Element mrow2 = (Element) document.createElement("mrow");
				parentnode = insertnode;
				parentnode.appendChild(mfrac);
				mfrac.appendChild(mrow);
				mfrac.appendChild(mrow2);
				insertnode = mrow;
			}
			else
			{
				Node parentnode, nextnode;
				Element mfrac = (Element) document.createElement("mroot");
				Element mrow = (Element) document.createElement("mrow");
				Element mrow2 = (Element) document.createElement("mrow");
				parentnode = document.createElement("cc");
				parentnode = insertnode.getParentNode();
				parentnode.appendChild(mfrac);
				mfrac.appendChild(mrow);
				mfrac.appendChild(mrow2);
				if (isbefor == 0)
				{
					nextnode = insertnode.getNextSibling();
				}
				else
				{
					nextnode = insertnode;
				}
				if (nextnode != mfrac)
				{
					parentnode.insertBefore(mfrac, nextnode);
				}
				insertnode = mrow;
			}
		}
		else if (n == 6)
		{ // 积分
			if (insertnode.getNodeName() == "mrow" || insertnode.getNodeName() == "mtd")
			{
				Node parentnode, nextnode;
				Element mintsubsup = (Element) document.createElement("msubsup");
				Element mrow = (Element) document.createElement("mrow");
				Element mo = (Element) document.createElement("mo");

⌨️ 快捷键说明

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