parent
fce2a2f13b
commit
8f4bb2540d
@ -0,0 +1,167 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.datatransfer.Clipboard;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.awt.event.*;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class C1 extends JFrame implements ActionListener {
|
||||
private JTextField displayField;
|
||||
private JTextArea historyArea;
|
||||
private List<String> historyList;
|
||||
|
||||
private double num1, num2;
|
||||
private String operator;
|
||||
|
||||
public C1() {
|
||||
super("Calculator");
|
||||
|
||||
historyList = new ArrayList<>();
|
||||
|
||||
// 设置布局
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
// 显示区域
|
||||
JPanel displayPanel = new JPanel(new GridLayout(1, 2));
|
||||
displayField = new JTextField();
|
||||
displayField.setEditable(false);
|
||||
historyArea = new JTextArea();
|
||||
historyArea.setEditable(false);
|
||||
JScrollPane historyScrollPane = new JScrollPane(historyArea);
|
||||
|
||||
displayPanel.add(displayField);
|
||||
displayPanel.add(historyScrollPane);
|
||||
|
||||
add(displayPanel, BorderLayout.NORTH);
|
||||
|
||||
// 按钮区域
|
||||
JPanel buttonPanel = new JPanel(new GridLayout(4, 4));
|
||||
String[] buttonLabels = {
|
||||
"7", "8", "9", "/",
|
||||
"4", "5", "6", "*",
|
||||
"1", "2", "3", "-",
|
||||
"0", ".", "=", "+"
|
||||
};
|
||||
|
||||
for (String label : buttonLabels) {
|
||||
JButton button = new JButton(label);
|
||||
button.addActionListener(this);
|
||||
buttonPanel.add(button);
|
||||
}
|
||||
|
||||
JButton saveButton = new JButton("保存");
|
||||
saveButton.addActionListener(this);
|
||||
JButton copyButton = new JButton("复制");
|
||||
copyButton.addActionListener(this);
|
||||
JButton clearButton = new JButton("清除");
|
||||
clearButton.addActionListener(this);
|
||||
|
||||
buttonPanel.add(saveButton);
|
||||
buttonPanel.add(copyButton);
|
||||
buttonPanel.add(clearButton);
|
||||
|
||||
add(buttonPanel, BorderLayout.CENTER);
|
||||
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
setSize(300, 400);
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String command = e.getActionCommand();
|
||||
|
||||
if (command.equals("保存")) {
|
||||
saveHistoryToFile();
|
||||
} else if (command.equals("复制")) {
|
||||
copyToClipboard();
|
||||
} else if (command.equals("清除")) {
|
||||
clearHistory();
|
||||
} else if (Character.isDigit(command.charAt(0)) || command.equals(".")) {
|
||||
displayField.setText(displayField.getText() + command);
|
||||
} else if (command.equals("=")) {
|
||||
calculate();
|
||||
} else {
|
||||
// 运算符
|
||||
num1 = Double.parseDouble(displayField.getText());
|
||||
operator = command;
|
||||
displayField.setText("");
|
||||
}
|
||||
}
|
||||
|
||||
private void calculate() {
|
||||
num2 = Double.parseDouble(displayField.getText());
|
||||
double result = 0;
|
||||
|
||||
switch (operator) {
|
||||
case "+":
|
||||
result = num1 + num2;
|
||||
break;
|
||||
case "-":
|
||||
result = num1 - num2;
|
||||
break;
|
||||
case "*":
|
||||
result = num1 * num2;
|
||||
break;
|
||||
case "/":
|
||||
if (num2 != 0) {
|
||||
result = num1 / num2;
|
||||
} else {
|
||||
displayField.setText("Error");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
displayField.setText(Double.toString(result));
|
||||
|
||||
String historyEntry = num1 + " " + operator + " " + num2 + " = " + result;
|
||||
historyList.add(historyEntry);
|
||||
updateHistoryArea();
|
||||
}
|
||||
|
||||
private void updateHistoryArea() {
|
||||
historyArea.setText("");
|
||||
for (String entry : historyList) {
|
||||
historyArea.append(entry + "\n");
|
||||
}
|
||||
}
|
||||
|
||||
private void saveHistoryToFile() {
|
||||
JFileChooser fileChooser = new JFileChooser();
|
||||
int result = fileChooser.showSaveDialog(this);
|
||||
if (result == JFileChooser.APPROVE_OPTION) {
|
||||
File file = fileChooser.getSelectedFile();
|
||||
try (FileWriter writer = new FileWriter(file)) {
|
||||
for (String entry : historyList) {
|
||||
writer.write(entry + "\n");
|
||||
}
|
||||
writer.flush();
|
||||
JOptionPane.showMessageDialog(this, "保存成功");
|
||||
} catch (IOException e) {
|
||||
JOptionPane.showMessageDialog(this, "保存失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void copyToClipboard() {
|
||||
String selectedText = historyArea.getSelectedText();
|
||||
if (selectedText != null && !selectedText.isEmpty()) {
|
||||
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
|
||||
clipboard.setContents(new StringSelection(selectedText), null);
|
||||
}
|
||||
}
|
||||
|
||||
private void clearHistory() {
|
||||
historyList.clear();
|
||||
updateHistoryArea();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
SwingUtilities.invokeLater(() -> new C1());
|
||||
}
|
||||
}
|
Loading…
Reference in new issue