Java实现常规的计算器(网格布局)

àì夳堔傛蜴生んèń 2022-05-28 12:08 211阅读 0赞

计算器的布局比较整齐,利用网格布局排列计算器按钮是一种比较理想的方式,实现的java程序如下:

  1. import java.awt.*;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import javax.swing.*;
  5. /**
  6. *
  7. * @author IWong
  8. *
  9. */
  10. public class Calculator {
  11. public static void main(String[] args) {
  12. EventQueue.invokeLater(() -> {
  13. CalculatorFrame frame = new CalculatorFrame();
  14. frame.setTitle("计算器");
  15. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  16. frame.setVisible(true);
  17. });
  18. }
  19. }
  20. class CalculatorFrame extends JFrame{
  21. public CalculatorFrame() {
  22. add(new CalculatorPanel());
  23. pack();
  24. }
  25. }
  26. class CalculatorPanel extends JPanel{
  27. private JPanel panel;
  28. private JTextField display;
  29. private double result;
  30. private String lastcommand;
  31. private boolean start=true;
  32. public CalculatorPanel() {
  33. setLayout(new BorderLayout());
  34. display=new JTextField();
  35. display.setHorizontalAlignment(JTextField.RIGHT);
  36. result=0;
  37. display.setText(""+result);
  38. add(display,BorderLayout.NORTH);
  39. ActionListener insert=new InsertAction();
  40. ActionListener command=new CommandAction();
  41. panel=new JPanel();
  42. panel.setLayout(new GridLayout(4,4));
  43. addButton("7",insert);
  44. addButton("8",insert);
  45. addButton("9",insert);
  46. addButton("/",command);
  47. addButton("4",insert);
  48. addButton("5",insert);
  49. addButton("6",insert);
  50. addButton("*",command);
  51. addButton("1",insert);
  52. addButton("2",insert);
  53. addButton("3",insert);
  54. addButton("+",command);
  55. addButton("0",insert);
  56. addButton(".",insert);
  57. addButton("=",command);
  58. addButton("+",command);
  59. add(panel,BorderLayout.CENTER);
  60. }
  61. private void addButton(String s, ActionListener listener) {
  62. JButton button=new JButton(s);
  63. button.addActionListener(listener);
  64. panel.add(button);
  65. }
  66. private class InsertAction implements ActionListener{
  67. public void actionPerformed(ActionEvent event) {
  68. String input=event.getActionCommand();
  69. if(start){
  70. display.setText("");
  71. start=false;
  72. }
  73. display.setText(display.getText()+input);
  74. }
  75. }
  76. private class CommandAction implements ActionListener{
  77. public void actionPerformed(ActionEvent event) {
  78. String command=event.getActionCommand();
  79. if(command.equals("=")){
  80. if(lastcommand.equals("+")) result+=Double.parseDouble(display.getText());
  81. if(lastcommand.equals("-")) result-=Double.parseDouble(display.getText());
  82. if(lastcommand.equals("*")) result*=Double.parseDouble(display.getText());
  83. if(lastcommand.equals("/")) result/=Double.parseDouble(display.getText());
  84. display.setText(""+result);
  85. start=true;
  86. }else{
  87. result=Double.parseDouble(display.getText());
  88. lastcommand=command;
  89. start=true;
  90. }
  91. }
  92. }
  93. }

发表评论

表情:
评论列表 (有 0 条评论,211人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Grid网格布局

    简介 > Flex布局时一维的布局,即水平或垂直方向的布局。而Grid布局则划分成“行”和“列”,产生单元格,可以看作是二维的布局。Grid布局远比Flex布局强大