Java图形用户界面实验

时间:2025-03-14 08:30:19
package com.zhangyufan.gui; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TestCalculator { public static void main(String args[]) { Calculator calculator = new Calculator(); } } class Calculator extends Frame implements ActionListener, WindowListener{ private Container container; private GridBagLayout layout; private GridBagConstraints constraints; private JTextField displayField; private String lastCommand; private double result; private boolean start; private JMenuBar menubar; private JMenuItem m_exit; private JMenuItem m2_ejz; private JMenuItem m2_bjz; private Dialog dialog; private Label label_dialog; private JButton button_sqrt; private JButton button_remainder; private JButton button_CE; private JButton button_cancel; private JButton button_1; private JButton button_2; private JButton button_3; private JButton button_4; private JButton button_5; private JButton button_6; private JButton button_7; private JButton button_8; private JButton button_9; private JButton button_0; private JButton button_plus; private JButton button_minus; private JButton button_multiply; private JButton button_divide; private JButton button_point; private JButton button_equal; private JButton button_log; private JButton button_tan; private JButton button_cos; private JButton button_sin; private JButton button_exp; public Calculator() { super("小明同学的Swing版计算器"); this.setLocation(350, 150); this.setSize(450, 400); this.setResizable(true); this.setLayout(new GridLayout(7, 1)); this.addmyMenu(); displayField = new JTextField(30); this.add(displayField); displayField.setEditable(true); start = true; result = 0; lastCommand = "="; JPanel panel0 = new JPanel(); panel0.setLayout(new GridLayout(1, 4, 4, 4)); JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayout(1, 5, 4, 4)); this.add(panel1); button_sqrt = new JButton("sqrt"); button_remainder = new JButton("%"); button_exp = new JButton("exp"); button_CE = new JButton("退位"); button_cancel = new JButton("c"); JPanel panel2 = new JPanel(); panel2.setLayout(new GridLayout(1, 5, 4, 4)); this.add(panel2); button_7 = new JButton("7"); button_8 = new JButton("8"); button_9 = new JButton("9"); button_log = new JButton("log"); button_divide = new JButton("/"); JPanel panel3 = new JPanel(); panel3.setLayout(new GridLayout(1, 5, 4, 4)); this.add(panel3); button_4 = new JButton("4"); button_5 = new JButton("5"); button_6 = new JButton("6"); button_tan = new JButton("tan"); button_multiply = new JButton("*"); JPanel panel4 = new JPanel(); panel4.setLayout(new GridLayout(1, 5, 4, 4)); this.add(panel4); button_1 = new JButton("1"); button_2 = new JButton("2"); button_3 = new JButton("3"); button_cos = new JButton("cos"); button_minus = new JButton("-"); JPanel panel5 = new JPanel(); panel5.setLayout(new GridLayout(1, 5, 4, 4)); this.add(panel5); button_0 = new JButton("0"); button_point = new JButton("."); button_equal = new JButton("="); button_sin = new JButton("sin"); button_plus = new JButton("+"); panel1.add(button_sqrt); panel1.add(button_remainder); panel1.add(button_exp); panel1.add(button_CE); panel1.add(button_cancel); panel2.add(button_7); panel2.add(button_8); panel2.add(button_9); panel2.add(button_log); panel2.add(button_divide); panel3.add(button_4); panel3.add(button_5); panel3.add(button_6); panel3.add(button_tan); panel3.add(button_multiply); panel4.add(button_1); panel4.add(button_2); panel4.add(button_3); panel4.add(button_cos); panel4.add(button_minus); panel5.add(button_0); panel5.add(button_point); panel5.add(button_equal); panel5.add(button_sin); panel5.add(button_plus); button_sqrt.addActionListener(this); button_remainder.addActionListener(this); button_exp.addActionListener(this); button_CE.addActionListener(this); button_cancel.addActionListener(this); button_7.addActionListener(this); button_8.addActionListener(this); button_9.addActionListener(this); button_log.addActionListener(this); button_divide.addActionListener(this); button_4.addActionListener(this); button_5.addActionListener(this); button_6.addActionListener(this); button_tan.addActionListener(this); button_multiply.addActionListener(this); button_1.addActionListener(this); button_2.addActionListener(this); button_3.addActionListener(this); button_cos.addActionListener(this); button_minus.addActionListener(this); button_0.addActionListener(this); button_point.addActionListener(this); button_equal.addActionListener(this); button_sin.addActionListener(this); button_plus.addActionListener(this); this.addWindowListener(new WinClose()); this.setVisible(true); } private void addmyMenu() { JMenuBar menubar = new JMenuBar(); this.add(menubar); JMenu m1 = new JMenu("选项"); JMenu m2 = new JMenu("进制转换"); JMenuItem m1_exit = new JMenuItem("退出"); m1_exit.addActionListener(this); JMenuItem m2_ejz = new JMenuItem("二进制"); m2_ejz.addActionListener(this); JMenuItem m2_bjz = new JMenuItem("八进制"); m2_bjz.addActionListener(this); JMenuItem m2_sljz = new JMenuItem("十六进制"); m2_sljz.addActionListener(this); JMenuItem m2_dao_shu = new JMenuItem("倒数"); m2_dao_shu.addActionListener(this); JMenu m3 = new JMenu("帮助"); JMenuItem m3_Help = new JMenuItem("用法"); m3_Help.addActionListener(this); dialog = new Dialog(this, "提示", true); dialog.setSize(240, 80); label_dialog = new Label("", Label.CENTER); dialog.add(label_dialog); dialog.addWindowListener(this); m1.add(m1_exit); menubar.add(m1); m2.add(m2_ejz); m2.add(m2_bjz); m2.add(m2_sljz); m2.add(m2_dao_shu); menubar.add(m2); m3.add(m3_Help); menubar.add(m3); } public void actionPerformed(ActionEvent e) { if (e.getSource().equals(button_1) || e.getSource().equals(button_2) || e.getSource().equals(button_3) || e.getSource().equals(button_4) || e.getSource().equals(button_5) || e.getSource().equals(button_6) || e.getSource().equals(button_7) || e.getSource().equals(button_8) || e.getSource().equals(button_9) || e.getSource().equals(button_0) || e.getSource().equals(button_point) || e.getSource().equals(button_cancel) || e.getSource().equals(button_CE)) { String input = e.getActionCommand(); if (start) { displayField.setText(""); start = false; if (input.equals("+/-")) displayField.setText(displayField.getText() + "-"); } if (!input.equals("+/-")) { String str = displayField.getText(); if (input.equals("退位")) { if (str.length() > 0) displayField.setText(str.substring(0, str.length() - 1)); }else if (input.equals("c")) { displayField.setText(""); start = true; } else displayField.setText(displayField.getText() + input); } }else if (e.getActionCommand() == "二进制") { int n = Integer.parseInt(displayField.getText()); displayField.setText(Integer.toBinaryString(n)); }else if (e.getActionCommand() == "八进制") { int n = Integer.parseInt(displayField.getText()); displayField.setText(Integer.toOctalString(n)); }else if (e.getActionCommand() == "十六进制") { int n = Integer.parseInt(displayField.getText()); displayField.setText(Integer.toHexString(n)); }else if (e.getActionCommand() == "倒数") { Double n = Double.parseDouble(displayField.getText()); displayField.setText(String.valueOf(1 / n)); }else if (e.getActionCommand() == "退出") { System.exit(0); }else if (e.getActionCommand() == "用法") { label_dialog.setText("欢迎使用小明同学的Swing版计算器,进制转换先录入数字最后再点击几进制选项,sqrt,exp等键是先输运算符再输数字。"); dialog.setLocation(400, 250); dialog.setVisible(true); }else { String command = e.getActionCommand(); if (start) { lastCommand = command; } else { calculate(Double.parseDouble(displayField.getText())); lastCommand = command; start = true; } } } public void calculate(double x) { double d = 0; if (lastCommand.equals("+")) result += x; else if (lastCommand.equals("-")) result -= x; else if (lastCommand.equals("*")) result *= x; else if (lastCommand.equals("/")) result /= x; else if (lastCommand.equals("%")) result %= x; else if (lastCommand.equals("=")) result = x; else if (lastCommand.equals("sqrt")) { d = Math.sqrt(x); result = d; } else if (lastCommand.equals("exp")) { d = Math.exp(x); result = d; } else if (lastCommand.equals("log")) { d = Math.log(x); result = d; } else if (lastCommand.equals("tan")) { d = Math.tan(x); result = d; } else if (lastCommand.equals("cos")) { d = Math.cos(x); result = d; } else if (lastCommand.equals("sin")) { d = Math.sin(x); result = d; } displayField.setText("" + result); } public void windowClosing(WindowEvent e) { if (e.getSource() == dialog) dialog.setVisible(false); else System.exit(0); } public void windowOpened(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public static void main(String args[]) { Calculator calculator = new Calculator(); } } class WinClose implements WindowListener { public void windowClosing(WindowEvent e) { System.exit(0); } public void windowOpened(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } }