日期:2014-05-20  浏览次数:20655 次

只用AWT制作计算器,不许使用swing?
我们老师布置了一个小项目——不许使用swing,只能用AWT制作计算器。对于java菜鸟的我,这样做起来还真有点困难,那个+、-、*、/ 事件源我不会……请大家帮忙讨论一下!!

------解决方案--------------------
怎么找不到?四个按钮对象的值属性分别是加减乘除,都加到同一个事件监听里,然后捕获到事件后判断事件源的值属性是什么,最后再来做计算器
------解决方案--------------------
事件都在awt包里
Swing和AWT没有什么区别

不过话说回来,你们老师还是真的牛啊
非要你们用一个已经过时的,被官方抛弃掉的awt去做东西
------解决方案--------------------

------解决方案--------------------
这是我大一时做的,基本上都是用awt做的,楼主觉得哪有不好,自己在修饰一下就好
Java code
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Mycalculator extends JFrame
{
    private String[] names = { "退格", "CE", "C", "/", "7", "8", "9", "*", "4",
            "5", "6", "-", "1", "2", "3", "+", "0", "+/-", ".", "=" };
    private JButton[] jb = new JButton[names.length];
    private double x = 0d;
    private double y = 0d;
    private int z;// 作为运算符的选择
    StringBuffer str;
    JPanel p;
    JPanel p1;
    JTextField jt;
    MenuItem mi;

    public Mycalculator()
    {
        super("Followme_1987");
        MenuBar mb = new MenuBar();// 设置菜单栏
        setMenuBar(mb);
        Menu me = new Menu("编辑");
        Menu me1 = new Menu("关于");
        Menu me2 = new Menu("帮助");
        mi = new MenuItem("请点我");
        mi.addActionListener(new Mc());
        me1.add(mi);
        mb.add(me);
        mb.add(me1);
        mb.add(me2);
        jt = new JTextField(19);// 创建文本框 用于显示
        jt.setHorizontalAlignment(JTextField.RIGHT);
        jt.setText("0.");
        jt.setEditable(false);
        p = new JPanel(); // 创建一块板儿 并将文本框加入
        p.setBounds(8, 2, 220, 30);
        p.setLayout(new FlowLayout(FlowLayout.LEFT));
        p.add(jt);
        p1 = new JPanel(); // 创建另一块儿板儿
        p1.setLayout(new GridLayout(5, 4, 5, 5));
        p1.setBounds(13, 35, 210, 140);
        jt.setBackground(Color.getHSBColor(23, 25, 125));
        for (int i = 0; i < jb.length; i++)
        { // 加入按钮
            jb[i] = new JButton(names[i]);
            jb[i].setMargin(new Insets(4, 1, 4, 1));
            p1.add(jb[i]);
            if (i == 1 || i == 2 || i == 0)
            {
                jb[i].setForeground(Color.BLUE);
            }
            else if (i == 3 || i == 7 || i == 11 || i == 15)
            {
                jb[i].setForeground(Color.RED);
            }
            else if (i == 19)
            {
                jb[i].setForeground(Color.YELLOW);
                jb[i].setBackground(Color.RED);
            }
            else
            {
                jb[i].setBackground(Color.DARK_GRAY);
                jb[i].setForeground(Color.YELLOW);
            }
            jb[i].addActionListener(new Mc());

        }// 以上颜色带给人 轻松的感觉 避免视觉疲劳

        setLayout(null);
        add(p1);
        add(p);
        str = new StringBuffer();

    }

    /**
     * @param args
     */
    public static void main(String[] args)
    {

        // TODO Auto-generated method stub
        Mycalculator frame = new Mycalculator();
        frame.setBounds(400, 200, 240, 230);
        // frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setResizable(false);
    }

    public class Mc implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if (e.getSource() == mi)
            {
                JOptionPane.showMessageDialog(null, "楼主要记得结贴......");
            }
            if (e.getSource() == jb[0])
            { // 按下退格键
                if (!jt.getText().trim().equals("0."))
                {
                    if (str.length() != 1)
                    {

                        jt.setText(str.delete(str.length() - 1, str.length())
                                .toString());

                    }
                    else
                    {
                        jt.setText("0.");
                        str.setLength(0);
                    }
                    y = Double.parseDouble(jt.getText().trim());
                }
            }
            else if (e.getSource() == jb[1] || e.getSource() == jb[2])
            { // 按下CE键或者C键
                jt.setText("0.");
                str.setLength(0);
                x = 0d;
                y = 0d;
                z = 0;
            }
            else if (e.getSource() == jb[3])
            { // 按下除号键 并且设置z=1
                x = Double.parseDouble(jt.getText().trim());
                str.setLength(0);
                y = 0d;
                z = 1;
            }
            else if (e.getSource() == jb[7])
            { // 按下乘号键并且设置z=2
                x = Double.parseDouble(jt.getText().trim());
                str.setLength(0);
                y = 0d;
                z = 2;
            }
            else if (e.getSource() == jb[11])
            { // 按下减号键并且设置z=3
                x = Double.parseDouble(jt.getText().trim());
                str.setLength(0);
                y = 0d;
                z = 3;
            }
            else if (e.getSource() == jb[15])
            { // 按下加号键并且设置z=4
                x = Double.parseDouble(jt.getText().trim());
                str.setLength(0);
                y = 0d;
                z = 4;
            }
            else if (e.getSource() == jb[19])
            { // 按下=号键
                str.setLength(0);
                switch (z)
                {
                case 1:
                    jt.setText("" + (x / y));
                    break;
                case 2:
                    jt.setText("" + (x * y));
                    break;
                case 3:
                    jt.setText("" + (x - y));
                    break;
                case 4:
                    jt.setText("" + (x + y));
                    break;
                }
            }
            else if (e.getSource() == jb[17])
            { // 按下+/-
                if (jt.getText().trim().equals("0."))
                {
                }
                else
                {
                    // x = Double.parseDouble(jt.getText().trim());
                    // jt.setText("" + (-x));
                    if (jt.getText().trim().startsWith("-"))
                    {
                        jt.setText(jt.getText().trim().substring(1));
                    }
                    else
                    {
                        jt.setText("-" + jt.getText().trim());
                    }
                }
            }
            else if (e.getSource() == jb[18])
            { // 按下小数点
                if (jt.getText().trim().indexOf(".") != -1)
                {// 字符串中有小数点
                    if (jt.getText().trim().equals("0."))
                    { // 为初始状态
                        str.setLength(0);
                        jt.setText(str.append("0.").toString());
                    }
                    else
                    {
                    }
                }

                else
                {
                    jt.setText(str.append(e.getActionCommand()).toString());
                }
                y = 0d;
            }
            else if (e.getSource() == jb[16])
            {// 按下0键
                if (!jt.getText().trim().equals("0."))
                {
                    jt.setText(str.append(e.getActionCommand()).toString());
                    y = Double.parseDouble(e.getActionCommand().trim());
                }
                else
                {
                }
            }
            else
            {// 按下其他数字键

                jt.setText(str.append(e.getActionCommand()).toString());
                y = Double.parseDouble(jt.getText().trim());
            }
        }
    }
}