📄 mathobj.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 + -