📄 panel1.java
字号:
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 + -