📄 applet1.java
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi
// Source File Name: Applet1.java
import java.applet.Applet;
import java.awt.Adjustable;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.CheckboxGroup;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Panel;
import java.awt.ScrollPane;
import java.awt.TextComponent;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.EventObject;
import java.util.Stack;
import java.util.Vector;
public class Applet1 extends Applet
implements ActionListener
{
public ScrollPane lsp;
public ScrollPane rsp;
public Button begin;
public Button next;
public Button reset;
public TextField tf1;
public Adjustable rha;
public Adjustable rva;
public Adjustable lha;
public Adjustable lva;
public Label la1;
public Panel pa;
public int wsize;
public int hsize;
public Font f;
rcanvas4_3 ca2;
int height;
int width;
int sel;
int lpheight;
int lpwidth;
int pheight;
int pwidth;
String buffer;
StringBuffer bufshow;
char buf[];
FontMetrics fm;
Stack st;
Vector vec;
int lrightl;
int lbottoml;
int rightl;
int bottoml;
int wid;
int heig;
boolean back;
boolean error;
boolean end;
boolean nowldev;
TextField tf2;
TextField tf3;
Label la2;
mycanvas4_3 mc;
String tokenseries;
TextField textField1;
Button my_description;
Panel panel1;
Panel left_panel;
Panel right_panel1;
CheckboxGroup Group1;
Label label1;
java.awt.List list1;
Label label2;
Label label3;
Canvas canvas1;
public void onclickdesc()
{
ca2.state = 1;
ca2.repaint();
}
int getparam(String str, char ch2)
throws Exception
{
int j = tokenseries.indexOf(ch2);
int k;
for(k = 7; k < 12; k++)
if(str.equals(mc.strbuf[k]))
break;
if(k > 11 || j < 1)
throw new Exception();
else
return (k - 6) * 10 + j;
}
public Applet1()
{
lsp = null;
rsp = null;
begin = null;
next = null;
reset = null;
tf1 = null;
la1 = null;
pa = null;
ca2 = new rcanvas4_3(this);
tf2 = null;
tf3 = null;
la2 = null;
mc = new mycanvas4_3();
tokenseries = " d+*()$";
vec = new Vector();
buf = new char[1024];
rightl = bottoml = 0;
lrightl = lbottoml = 0;
}
int drawconclude(Graphics g, int x, int y)
{
y -= height;
for(Enumeration e = vec.elements(); e.hasMoreElements(); g.drawString(e.nextElement().toString(), x, y += height));
return y;
}
public void repaint()
{
mc.repaint();
ca2.repaint();
}
public void onclicknext()
{
ca2.state = 0;
try
{
deal();
}
catch(Exception e)
{
vec.removeAllElements();
error = true;
}
if(end)
next.setEnabled(false);
repaint();
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == begin)
onclickbegin();
else
if(ae.getSource() == next)
onclicknext();
else
if(ae.getSource() == reset)
onclickreset();
else
if(ae.getSource() == my_description)
onclickdesc();
}
public void init()
{
f = new Font("Helvetica", 1, 16);
Dimension d1 = getSize();
int wsize = d1.width;
int hsize = d1.height;
setLayout(null);
setSize(800, 600);
left_panel = new Panel();
left_panel.setLayout(null);
left_panel.setBounds(10, 10, wsize - 300 - (wsize * 2) / 100, (hsize * 99) / 100);
mc.setBounds(10, 10, wsize - 320 - (wsize * 2) / 100, 150);
add(left_panel);
left_panel.add(mc);
la2 = new Label("栈");
la2.setBounds(10, 170, 15, 20);
left_panel.add(la2);
tf2 = new TextField();
tf2.setEditable(false);
tf2.setBounds(35, 170, 200, 20);
left_panel.add(tf2);
la2 = new Label("请输入表达式");
la2.setBounds(10, 200, 80, 20);
left_panel.add(la2);
tf3 = new TextField();
tf3.setBounds(115, 200, 120, 20);
left_panel.add(tf3);
tf3.setText("id*(id+id)");
tf2.setText("$E");
tf2.setEditable(false);
lsp = new ScrollPane(0);
lsp.setBounds(wsize - 270, 0, 260, (hsize * 98) / 100);
add(lsp);
lsp.add(ca2);
Dimension d = lsp.getSize();
sel = -2;
error = false;
pheight = d.height;
pwidth = d.width;
d = lsp.getSize();
lpheight = d.height;
lpwidth = d.width;
end = false;
begin = new Button();
begin.setActionCommand("button");
begin.setLabel("开始");
begin.setBounds(10, 230, 108, 24);
left_panel.add(begin);
begin.addActionListener(this);
next = new Button();
next.setActionCommand("button");
next.setLabel("下一步");
next.setBounds(10, 260, 108, 24);
next.setEnabled(false);
left_panel.add(next);
next.addActionListener(this);
reset = new Button();
reset.setActionCommand("button");
reset.setLabel("重新开始");
reset.setBounds(10, 290, 108, 24);
reset.setEnabled(false);
left_panel.add(reset);
reset.addActionListener(this);
my_description = new Button();
my_description.setActionCommand("button");
my_description.setLabel("使用说明");
my_description.setBounds(10, 320, 108, 24);
my_description.addActionListener(this);
left_panel.add(my_description);
}
public void onclickbegin()
{
ca2.state = 0;
reset.setEnabled(true);
next.setEnabled(true);
begin.setEnabled(false);
tf3.setEditable(false);
buffer = tf3.getText();
buffer.getChars(0, sel = buffer.length(), buf, 0);
int j = 0;
for(int i = 0; i < sel;)
switch(buf[i])
{
default:
buf[j] = buf[i];
j++;
// fall through
case 9: // '\t'
case 10: // '\n'
case 13: // '\r'
case 32: // ' '
i++;
break;
}
if(j == 0 || buf[j - 1] != '$')
buf[j++] = '$';
sel = -2;
buffer = new String(buf, 0, j);
tf3.setText(buffer);
try
{
deal();
}
catch(Exception e)
{
vec.removeAllElements();
error = true;
}
repaint();
}
public void onclickreset()
{
ca2.state = 0;
reset.setEnabled(false);
begin.setEnabled(true);
next.setEnabled(false);
tf3.setEditable(true);
tf2.setText("$E");
end = false;
sel = -2;
vec.removeAllElements();
mc.setParam(-1);
error = false;
repaint();
}
public void rupdate()
{
Graphics gg = ca2.getGraphics();
gg.setFont(f);
fm = gg.getFontMetrics();
height = fm.getHeight();
width = fm.charWidth('E');
wid = width + 15;
heig = height + 23;
ca2.setSize(Math.max(rightl, pwidth), Math.max(bottoml, pheight));
Graphics tg = ca2.getGraphics();
tg.setFont(f);
tg.clearRect(0, 0, rightl, bottoml);
rightl = bottoml = 0;
int k1 = height;
if(error)
{
tg.drawString("输入串错误", 10, 20);
rightl = fm.stringWidth("输入串错误") + 10;
bottoml = 21;
next.setEnabled(false);
return;
}
for(Enumeration e = vec.elements(); e.hasMoreElements();)
{
tg.drawString((String)e.nextElement(), width * 2, k1);
k1 += height;
}
bottoml = k1;
rightl = width * 50;
}
void deal()
throws Exception
{
String str = tf2.getText();
char chl = str.charAt(str.length() - 1);
char ch = buffer.charAt(0);
if(ch == 'i')
{
ch = buffer.charAt(1);
if(ch != 'd')
throw new Exception();
}
int k;
if(tokenseries.indexOf(chl) > 0)
{
if(chl == ch)
if(chl == 'd')
{
str = str.substring(0, str.length() - 2);
buffer = buffer.substring(2);
} else
{
if(chl == '$')
{
mc.setParam(-1);
end = true;
return;
}
str = str.substring(0, str.length() - 1);
buffer = buffer.substring(1);
}
} else
{
String str1 = null;
if(chl == '\'')
str1 = str.substring(str.length() - 2);
else
str1 = "" + chl;
k = getparam(str1, ch);
if(sel == -2)
{
mc.setParam(k);
sel = -1;
return;
}
switch(mc.buf[k / 10][k % 10])
{
case 0: // '\0'
if(ch == 'd')
buffer = buffer.substring(2);
else
buffer = buffer.substring(1);
break;
case 12: // '\f'
str = str.substring(0, str.length() - 1) + "E'T";
break;
case 13: // '\r'
str = str.substring(0, str.length() - 1);
break;
case 14: // '\016'
str = str + "T+";
break;
case 15: // '\017'
case 17: // '\021'
str = str.substring(0, str.length() - 2);
break;
case 16: // '\020'
str = str.substring(0, str.length() - 1) + "T'F";
break;
case 18: // '\022'
str = str + "F*";
break;
case 19: // '\023'
str = str.substring(0, str.length() - 1) + "id";
break;
case 20: // '\024'
str = str.substring(0, str.length() - 1) + ")E(";
break;
default:
throw new Exception();
}
k = mc.buf[k / 10][k % 10];
if(k == 13)
k = 22;
else
if(k == 0)
k = 21;
vec.addElement(mc.strbuf[k]);
}
tf3.setText(buffer);
tf2.setText(str);
chl = str.charAt(str.length() - 1);
ch = buffer.charAt(0);
if(ch == 'i')
{
ch = buffer.charAt(1);
if(ch != 'd')
throw new Exception();
}
if(tokenseries.indexOf(chl) > 0)
k = -1;
else
if(chl == '\'')
k = getparam(str.substring(str.length() - 2), ch);
else
k = getparam(str.substring(str.length() - 1), ch);
mc.setParam(k);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -