📄 window.java
字号:
package 大整数计算器;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Window extends JFrame {
private JTabbedPane tabbedPane;
private JTextArea AboutFile;
private JTextField display;
private JButton[] buttons;
private JPanel page1;
private JPanel page2;
private JTextArea display2;
private JButton choosefile = new JButton("载入");
private JButton doit = new JButton("计算");
private JButton view = new JButton("View");
public StringBuffer displayString;
public File file;
int choosen;
String[] ButtonTexts = { "(", ")", "^", "+", "7", "8", "9", "-", "4", "5",
"6", "*", "1", "2", "3", "/", "0", "<-", "CE", "=" };
int i;
Window() {
super("--/ 大整数计算器 /--");
buttons = new JButton[20];
JPanel buttonpanel = new JPanel();
displayString = new StringBuffer("");
display = new JTextField("0", 19);
display.setHorizontalAlignment(4);
display.setEditable(false);
display.setBackground(new Color(255, 255, 255));
buttonpanel.setBackground(new Color(200, 221, 242));
buttonpanel.setLayout(new GridLayout(5, 4, 9, 9));
for (i = 0; i < 16; i++) {
buttons[i] = new JButton(ButtonTexts[i]);
buttons[i].setFont(new Font("宋体", 21, 12));
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JButton Source = (JButton) event.getSource();
String s = Source.getText();
displayString.insert(displayString.length(), s);
display.setText(displayString.toString());
}
});
buttonpanel.add(buttons[i]);
}
buttons[16] = new JButton(ButtonTexts[16]);
buttons[16].setFont(new Font("宋体", 21, 12));
buttons[16].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JButton Source = (JButton) event.getSource();
String s = Source.getText();
if (!(display.getText().charAt(0) == '0' && display.getText()
.length() == 1)) {
displayString.insert(displayString.length(), s);
display.setText(displayString.toString());
}
}
});
buttonpanel.add(buttons[16]);
buttons[17] = new JButton(ButtonTexts[17]);
buttons[17].setForeground(new Color(255, 0, 0));
buttons[17].setFont(new Font("宋体", 21, 12));
buttons[17].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (!(display.getText().charAt(0) == '0' && display.getText()
.length() == 1)) {
displayString.delete(displayString.length() - 1,
displayString.length());
display.setText(displayString.toString());
}
if (displayString.length() == 0)
display.setText("0");
}
});
buttonpanel.add(buttons[17]);
buttons[18] = new JButton(ButtonTexts[18]);
buttons[18].setForeground(new Color(255, 0, 0));
buttons[18].setFont(new Font("宋体", 21, 12));
buttons[18].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
displayString = new StringBuffer("");
display.setText("0");
}
});
buttonpanel.add(buttons[18]);
buttons[19] = new JButton(ButtonTexts[19]);
buttons[19].setForeground(new Color(255, 0, 0));
buttons[19].setFont(new Font("Arial Black", 21, 14));
buttons[19].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if (isCorrect(new StringBuffer(display.getText()))) {
display.setText(calculate(display.getText())
.toStringBuffer().toString());
if (!display.getText().equals("0"))
displayString = new StringBuffer(display.getText());
else
displayString = new StringBuffer("");
} else {
display.setText("ERROR~~!");
displayString = new StringBuffer("");
}
}
});
buttonpanel.add(buttons[19]);
tabbedPane = new JTabbedPane();
page1 = new JPanel();
page1.setBackground(new Color(200, 221, 242));
// page1.setBackground(new Color(200, 221, 242));
page1.setLayout(new FlowLayout());
page1.add(new JScrollPane(display));
page1.add(buttonpanel);
JLabel inf = new JLabel("本程序支持表达式及大整数计算");
inf.setForeground(new Color(0, 0, 0));
inf.setFont(new Font("宋体", 20, 13));
page1.add(inf);// 第一页
display2 = new JTextArea(" 请选择批量处理文件-->\n", 10, 19);
display2.setEditable(false);
page2 = new JPanel();
page2.setBackground(new Color(200, 221, 242));
JScrollPane js = new JScrollPane(display2);
js.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
js
.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
page2.add(js);
page2.add(choosefile);
doit.setEnabled(false);
view.setEnabled(false);
choosefile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
openfile();
display2.setText(" 请选择批量处理文件-->\n");
if (choosen != JFileChooser.CANCEL_OPTION && file.isFile()) {
BufferedReader stream;
boolean isTrue = true;
try {
stream = new BufferedReader(new FileReader(file));
String s = stream.readLine();
while (s != null) {
for (int i = 0; i < s.length(); i++) {
if (!isNumber(s.charAt(i))
&& !isOperator(s.charAt(i))
&& s.charAt(i) != ' ') {
isTrue = false;
break;
}
}
if (!isTrue)
break;
s = stream.readLine();
}
} catch (IOException e) {
}
if (isTrue) {
display2.insert(" 文件打开成功! ", display2.getText()
.length());
display2.insert(" 目标文件:" + " " + file.getName()
+ " \n\n", display2.getText().length());
doit.setEnabled(true);
view.setEnabled(true);
} else {
display2.insert(" 未知的文件格式 ", display2.getText()
.length());
}
}
}
});
doit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
BufferedReader stream;
try {
stream = new BufferedReader(new FileReader(file));
StringBuffer thisformula;
thisformula = new StringBuffer(stream.readLine());
while (thisformula != null) {
for (int i = 0; i < thisformula.length(); i++) {
if (thisformula.charAt(i) == ' ') {
thisformula.delete(i, i + 1);
i--;
}
}
while (isOperator(thisformula.charAt(thisformula
.length() - 1))) {
thisformula.insert(thisformula.length(), stream
.readLine());
for (int i = 0; i < thisformula.length(); i++) {
if (thisformula.charAt(i) == ' ') {
thisformula.delete(i, i + 1);
i--;
}
}
}
display2.insert(
" " + thisformula.toString() + " \n",
display2.getText().length());
if (isCorrect(thisformula)) {
display2.insert(" = "
+ calculate(thisformula.toString())
.toStringBuffer() + " \n\n",
display2.getText().length());
} else {
display2.insert(" = ERROR \n\n", display2
.getText().length());
}
String s = stream.readLine();
if (s != null)
thisformula = new StringBuffer(s);
else
thisformula = null;
}
} catch (IOException e) {
display2.insert(" 文件打开错误!\n", display2.getText().length());
}
doit.setEnabled(false);
}
});
view.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
StringBuffer viewcontains = new StringBuffer("");
BufferedReader stream;
boolean isTrue = true;
try {
stream = new BufferedReader(new FileReader(file));
String s = stream.readLine();
while (s != null) {
for (int i = 0; i < s.length(); i++) {
if (!isNumber(s.charAt(i))
&& !isOperator(s.charAt(i))
&& s.charAt(i) != ' ') {
isTrue = false;
break;
}
}
if (!isTrue)
break;
viewcontains.insert(viewcontains.length(), s);
viewcontains.insert(viewcontains.length(), "\n");
s = stream.readLine();
}
} catch (IOException e) {
}
if (isTrue) {
JOptionPane.showMessageDialog(null,
viewcontains.toString(), file.getPath(),
JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "未知的文件格式", file
.getPath()
+ file.getName(), JOptionPane.INFORMATION_MESSAGE);
}
}
});
page2.add(new JLabel(" "));
page2.add(view);
page2.add(new JLabel(" "));
page2.add(doit);
tabbedPane.addTab("图形计算器", null, page1, "按照图形化界面计算");
tabbedPane.addTab("批量处理器", null, page2, "运行批量运算");
getContentPane().add(tabbedPane);
setSize(260, 310);
setResizable(false);
setVisible(true);
}
public BigINT calculate(String s) {
System.out.println(s);
BigINT result = new BigINT(new StringBuffer("0"), true);
OperatorStack opStack = new OperatorStack();
BigINTStack bigintStack = new BigINTStack();
for (int i = 0; i < s.length(); i++) {
if (isNumber(s.charAt(i))) {
int v1 = i;
int v2 = s.length();
for (int j = i; j < s.length(); j++) {
if (!isNumber(s.charAt(j))) {
v2 = j;
if (j == s.length() - 1 && s.charAt(j) != ')')
v2 = j + 1;
break;
}
}
i = v2 - 1;
bigintStack.push(new BigINT(new StringBuffer(s
.substring(v1, v2)), true));
}
if (isOperator(s.charAt(i))) {
switch (s.charAt(i)) {
case '(': {
opStack.push(new Operator('(', 0));
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -