学到java GUI 就写一个简单的计算器来玩玩
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
new NewCulalator();
}
}
class NewCulalator extends JFrame{
JPanel panel = new JPanel(new GridLayout(4,4,3,3));
JPanel p2 = new JPanel(new FlowLayout());
JTextArea textArea = new JTextArea();
JTextArea textArea2 = new JTextArea();
JScrollPane scrollPane = new JScrollPane();
JScrollPane scrollPane2 = new JScrollPane();
JButton []buttons;
String Flag = "";
String regex = "[0-9.]+";
DecimalFormat df = new DecimalFormat("0.00");
String []str = {"1","2","3","+","4","5","6","-","7","8","9","*","0",".","=","/"};
int []fh = {3,7,11,15};
public NewCulalator(){
init();
setTitle("简易计算器");
setSize(500,700);
setDefaultCloseOperation(3);
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
}
private void init(){
p2.setPreferredSize(new Dimension(500,320));
textArea.setLineWrap(true);
textArea.setEditable(false);
textArea.setBackground(Color.cyan);
textArea.setFont(new Font("楷体",Font.TYPE1_FONT,60));
scrollPane = new JScrollPane(textArea);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setPreferredSize(new Dimension(450,80));
textArea2.setEditable(false);
textArea2.setBackground(Color.cyan);
textArea2.setFont(new Font("宋体",Font.TYPE1_FONT,30));
scrollPane2 = new JScrollPane(textArea2);
scrollPane2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane2.setPreferredSize(new Dimension(450,200));
buttons = new JButton[str.length];
for(int i = 0; i < str.length; i++){
buttons[i] = new JButton(str[i]);
buttons[i].setFont(new Font("楷体",Font.TYPE1_FONT,60));
panel.add(buttons[i]);
}
for(int i = 0; i < str.length; i++){
int finalI = i;
if(buttons[i].getText().equals("=")){
buttons[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int f = 1;
if(Flag.equals("")){
textArea2.append("请输入数值和运算符进行计算!"+"\n");
}else {
for(int j = 0; j < fh.length;j++){
buttons[fh[j]].setEnabled(true);
}
String str = textArea.getText();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
double sum;
int c = 0;
double []text = {0,0};
while(matcher.find()){
String num_str = matcher.group();
try {
text[c] = Double.parseDouble(num_str);
}catch (Exception e1){
textArea2.append("请输入数值和运算符进行计算!"+"\n");
f = 0;
}
c++;
}
switch(Flag){
case "+":
sum = text[0] + text[1];
break;
case "-":
sum = text[0] - text[1];
break;
case "*":
sum = text[0] * text[1];
break;
case "/":
sum = text[0] / text[1];
break;
default:
throw new IllegalStateException("没有这个符号: " + Flag);
}
if(f == 1){
textArea2.append(text[0] + Flag + text[1] +" = "+df.format(sum)+"\n");
}
textArea.setText("");
Flag = "";
}
}
});
continue;
}
if(buttons[i].getText().equals("+")||buttons[i].getText().equals("-")||buttons[i].getText().equals("*")||buttons[i].getText().equals("/")){
buttons[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Flag = buttons[finalI].getText().toString();
textArea.append(buttons[finalI].getText());
for(int j = 0; j < fh.length;j++){
buttons[fh[j]].setEnabled(false);
}
}
});
continue;
}
buttons[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
textArea.append(buttons[finalI].getText());
}
});
}
setLayout(new BorderLayout());
p2.add(scrollPane2);
p2.add(scrollPane);
getContentPane().add(p2,BorderLayout.NORTH);
getContentPane().add(panel,BorderLayout.CENTER);
}
}