diff --git a/src/java2022spring/NumberView.java b/src/java2022spring/NumberView.java new file mode 100644 index 0000000000000000000000000000000000000000..d7e2ef16250641ef69ff4f9a788a868bc6b699f5 --- /dev/null +++ b/src/java2022spring/NumberView.java @@ -0,0 +1,121 @@ +//显示窗体 +package java2022spring; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.*; + +public class NumberView extends JFrame implements ActionListener{ + public JPanel north=new JPanel(); + public JPanel center=new JPanel(); + public JTextField inpuText; + public JButton button; + public String inputNumber1=null; + public String fuHao=null; + + public NumberView() { + init(); + addNorthComponent(); + addCentralButton(); + } + //初始化方法 + public void init(){ + setTitle("计算器"); + setBounds(650,330,500,400); + setLayout(new BorderLayout()); + setResizable(false); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + //添加北面控件 + public void addNorthComponent(){ + inpuText=new JTextField(); + inpuText.setPreferredSize(new Dimension(480,50)); + north.add(inpuText); + add(north,BorderLayout.NORTH); + } + //添加中间按钮 + public void addCentralButton() { + String[] BtText= {"%","√","X^2","1/X", + "CE","C","<<<","+/-", + "1", "2", "3", "+", + "4", "5", "6", "-", + "7", "8", "9", "*", + "0", ".", "=", "/", }; + String regex="[\\+\\-*/.=%√C]"; // + center.setLayout(new GridLayout(6,4)); + for(int i=0;i<24;i++) { + button=new JButton(BtText[i]); + button.setText(BtText[i]); + if(BtText[i].matches(regex)|| + BtText[i].equals("CE")|| + BtText[i].equals("<<<")|| + BtText[i].equals("+/-")|| + BtText[i].equals("1/X")|| + BtText[i].equals("X^2")) { + button.setFont(new Font("粗体",Font.BOLD,17)); + button.setForeground(Color.red); + } + + + /*matches() 方法用于检测字符串是否匹配给定的正则表达式。等同于如下代码 + * if(BtText[i].equals("+")|| + BtText[i].equals("-")|| + BtText[i].equals("*")|| + BtText[i].equals("/")|| + BtText[i].equals("=")|| + BtText[i].equals(".")) + { + button.setFont(new Font("粗体",Font.BOLD,20)); + button.setForeground(Color.red); + }此处借鉴了视频 https://www.bilibili.com/video/BV1d54y1s7uC?p=6 中的处理方法 + */ + button.addActionListener(this); + center.add(button); + } + add(center,BorderLayout.CENTER); + } + + public void actionPerformed(ActionEvent e) { + String str=e.getActionCommand(); //获取封装在事件中的“命令”字符串 + if("0123456789.".indexOf(str)!=-1) //使数字和小数点显示在文本框上 + { + this.inpuText.setText(inpuText.getText()+str); //保存前面点击的数字 + this.inpuText.setHorizontalAlignment(JTextField.RIGHT); //将文本从文本框的右边开始显示 + } + else if(str.equals("%")||str.equals("√")||str.equals("X^2")|| + str.equals("1/X")||str.equals("CE")||str.equals("C") || + str.equals("<<<")||str.equals("+/-")||str.equals("+")|| + str.equals("-")||str.equals("*")||str.equals("/")) + { + fuHao=str; //fuHao用来存放点击的运算符号 + inputNumber1=this.inpuText.getText(); //inputNumber1用来存放之前点击的数字 + this.inpuText.setText(""); //运算符号不显示在文本框上 + } + else if(str.equals("=")){ + + Double Number1=Double.valueOf(inputNumber1); + Double Number2=Double.valueOf(this.inpuText.getText()); + Double result=null; + switch(fuHao) { + case "+": + result=Number1 + Number2; + break; + case "-": + result=Number1 - Number2; + break; + case "*": + result=Number1 * Number2; + break; + case "/": + if(Number2!=0) { + result=Number1 / Number2; + } + break; + } + this.inpuText.setText(result.toString()); + } + } +} + \ No newline at end of file diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java index 24deb29bfc0e5f50fdedcd21b504e77b529d48b6..4e2fe4b235b409db6faef9821bc928c0dc3f72dd 100644 --- a/src/java2022spring/Test.java +++ b/src/java2022spring/Test.java @@ -2,6 +2,7 @@ package java2022spring; public class Test { public static void main(String[] args) { - System.out.println("Hello world!"); + NumberView carculator=new NumberView(); + carculator.setVisible(true); } }