import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.*;
public class MenuDemo extends JFrame implements ActionListener
{
private JTextField jtfNum1,jtfNum2,jtfResult;
private JButton jbtAdd,jbtSub,jbtMul,jbtDiv,jbtClear;
private JMenuItem jmiAdd,jmiSub,jmiMul,jmiDiv,jmiClose;
public static void main(String[] args)
{
MenuDemo frame=new MenuDemo();
frame.pack();
frame.setVisible(true);

}
public MenuDemo()
{
setTitle("Menu Demo");

 JPanel p1=new JPanel();
 p1.setLayout(new FlowLayout());
 p1.add(new JLabel("Number 1"));
 p1.add(jtfNum1=new JTextField(3));
 p1.add(new JLabel("Number 2"));
 p1.add(jtfNum2=new JTextField(3));
 p1.add(new JLabel("Result"));
 p1.add(jtfResult=new JTextField(4));
 jtfResult.setEditable(false);
 
 JPanel p2=new JPanel();
 p2.setLayout(new FlowLayout());
 p2.add(jbtAdd=new JButton("Add"));
 p2.add(jbtSub=new JButton("Subtract"));
 p2.add(jbtMul=new JButton("Multiply"));
 p2.add(jbtDiv=new JButton("Divide"));
 p2.add(jbtClear=new JButton("Clear"));
 
 getContentPane().setLayout(new BorderLayout());
 getContentPane().add(p1,BorderLayout.CENTER);
 getContentPane().add(p2,BorderLayout.SOUTH);
 
 jbtAdd.addActionListener(this);
 jbtSub.addActionListener(this);
 jbtMul.addActionListener(this);
 jbtDiv.addActionListener(this);
 
    }
  public void actionPerformed(ActionEvent e)
  {
  String actionCommand=e.getActionCommand();
  if(e.getSource() instanceof JButton)
  {
  if("Add".equals(actionCommand))
    calculate('+');
   if("Subtract".equals(actionCommand))
    calculate('-');
   if("Multily".equals(actionCommand))
    calculate('*');
   if("Divide".equals(actionCommand))
    calculate('/');
    if("Clear".equals(actionCommand))
    calculate('c');
    else if("Close".equals(actionCommand))
     System.exit(0);    
 
  }
  }  
  public void calculate(char operator)
  {
 
  int num1=(Integer.parseInt(jtfNum1.getText().trim()));
  int num2=(Integer.parseInt(jtfNum2.getText().trim()));
  int result=0;
   
   switch(operator)
   {
    case '+': result=num1+num2;break;
    case '-': result=num1-num2;break;
    case '*': result=num1*num2;break;
    case '/': result=num1/num2;break;
    case 'c': result=num1=num2=result=0;break;
   
    }
  jtfResult.setText(String.valueOf(result));
 
  }
}
哪里出现问题了????????

解决方案 »

  1.   

    恩 ,还有就是如果我想那个按钮不显示英文字母,而是显示符号呢??怎么改,意识就是把按钮的名称“Add”改成显示“+”呢??该怎么改?
      

  2.   


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import javax.swing.*;public class MenuDemo extends JFrame implements ActionListener {
    private JTextField jtfNum1, jtfNum2, jtfResult;
    private JButton jbtAdd, jbtSub, jbtMul, jbtDiv, jbtClear;
    private JMenuItem jmiAdd, jmiSub, jmiMul, jmiDiv, jmiClose; public static void main(String[] args) {
    MenuDemo frame = new MenuDemo();
    frame.pack();
    frame.setVisible(true); } public MenuDemo() {
    setTitle("Menu Demo"); JPanel p1 = new JPanel();
    p1.setLayout(new FlowLayout());
    p1.add(new JLabel("Number 1"));
    p1.add(jtfNum1 = new JTextField(3));
    p1.add(new JLabel("Number 2"));
    p1.add(jtfNum2 = new JTextField(3));
    p1.add(new JLabel("Result"));
    p1.add(jtfResult = new JTextField(4));
    jtfResult.setEditable(false); JPanel p2 = new JPanel();
    p2.setLayout(new FlowLayout());
    p2.add(jbtAdd = new JButton("Add"));
    p2.add(jbtSub = new JButton("Subtract"));
    p2.add(jbtMul = new JButton("Multiply"));
    p2.add(jbtDiv = new JButton("Divide"));
    p2.add(jbtClear = new JButton("Clear")); getContentPane().setLayout(new BorderLayout());
    getContentPane().add(p1, BorderLayout.CENTER);
    getContentPane().add(p2, BorderLayout.SOUTH); jbtAdd.addActionListener(this);
    jbtSub.addActionListener(this);
    jbtMul.addActionListener(this);
    jbtDiv.addActionListener(this);
    jbtClear.addActionListener(this);//jbtClear也要添加事件
    } public void actionPerformed(ActionEvent e) {
    String actionCommand = e.getActionCommand();
    if (e.getSource() instanceof JButton) {
    if ("Add".equals(actionCommand))
    calculate('+');
    if ("Subtract".equals(actionCommand))
    calculate('-');
    if ("Multiply".equals(actionCommand))//这里把Multiply也写错了
    calculate('*');
    if ("Divide".equals(actionCommand))
    calculate('/');
    if ("Clear".equals(actionCommand))
    calculate('c');
    else if ("Close".equals(actionCommand))
    System.exit(0); }
    } public void calculate(char operator) { int num1 = (Integer.parseInt(jtfNum1.getText().trim()));
    int num2 = (Integer.parseInt(jtfNum2.getText().trim()));
    int result = 0; switch (operator) {
    case '+':
    result = num1 + num2;
    break;
    case '-':
    result = num1 - num2;
    break;
    case '*':
    result = num1 * num2;
    break;
    case '/':
    result = num1 / num2;
    break;
    case 'c':
    result = num1 = num2 = result = 0;
    break; }
    jtfResult.setText(String.valueOf(result));
    if(operator == 'c') {//当为清楚的时候,也置前两个为0
    jtfNum1.setText("0");
    jtfNum2.setText("0");
    }
    }
    }我在程序中注释了有问题的地方
      

  3.   

    真的耶,哇,感激!……在case中是没法清零的是吗??那如果要显示符号而不是字母呢??怎么改呢??
      

  4.   

    其实在case中叶可以清零!case 'c':
    result = num1 = num2 = result = 0;
    jtfNum1.setText("0");
    jtfNum2.setText("0");
    break;
      

  5.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import javax.swing.*;
    public class MenuDemo extends JFrame implements ActionListener
    {
    private JTextField jtfNum1,jtfNum2,jtfResult;
    private JButton jbtAdd,jbtSub,jbtMul,jbtDiv,jbtClear;
    private JMenuItem jmiAdd,jmiSub,jmiMul,jmiDiv,jmiClose;
    public static void main(String[] args)
    {
    MenuDemo frame=new MenuDemo();
    frame.pack();
    frame.setVisible(true);}
    public MenuDemo()
    {
    setTitle("Menu Demo");JPanel p1=new JPanel();
    p1.setLayout(new FlowLayout());
    p1.add(new JLabel("Number 1"));
    p1.add(jtfNum1=new JTextField(3));
    p1.add(new JLabel("Number 2"));
    p1.add(jtfNum2=new JTextField(3));
    p1.add(new JLabel("Result"));
    p1.add(jtfResult=new JTextField(4));
    jtfResult.setEditable(false);
      
    JPanel p2=new JPanel();
    p2.setLayout(new FlowLayout());
    p2.add(jbtAdd=new JButton("+"));
    p2.add(jbtSub=new JButton("-"));
    p2.add(jbtMul=new JButton("*"));
    p2.add(jbtDiv=new JButton("/"));
    p2.add(jbtClear=new JButton("c"));
      
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(p1,BorderLayout.CENTER);
    getContentPane().add(p2,BorderLayout.SOUTH);
      
    jbtAdd.addActionListener(this);
    jbtSub.addActionListener(this);
    jbtMul.addActionListener(this);
    jbtDiv.addActionListener(this);
    jbtClear.addActionListener(this);
      
    }
    public void actionPerformed(ActionEvent e)
    {
    String actionCommand=e.getActionCommand();
    if(e.getSource() instanceof JButton)
    {
    if("+".equals(actionCommand))
    calculate("Add");
    if("-".equals(actionCommand))
    calculate("Subtract");
    if("*".equals(actionCommand))
    calculate("Multiply");
    if("/".equals(actionCommand))
    calculate("Divide");
    if("c".equals(actionCommand))
    calculate("Clear");
    else if("Close".equals(actionCommand))
    System.exit(0);    }
       }
    public void calculate(String operator)//改成了字符串型不可以,因为switch返回的要是int型的。那要怎么改呢?
    {int num1=(Integer.parseInt(jtfNum1.getText().trim()));
    int num2=(Integer.parseInt(jtfNum2.getText().trim()));
    int result=0;
      
    switch(operator)
    {
    case "Add": result=num1+num2;break;
    case "Subtract": result=num1-num2;break;
    case "Multiply": result=num1*num2;break;
    case "Divide": result=num1/num2;break;
    case "Clear": {
          jtfNum1.setText("0");
              jtfNum2.setText("0");
            }}jtfResult.setText(String.valueOf(result));}
    }
      

  6.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import javax.swing.*;
    public class MenuDemo extends JFrame implements ActionListener
    {
    private JTextField jtfNum1,jtfNum2,jtfResult;
    private JButton jbtAdd,jbtSub,jbtMul,jbtDiv,jbtClear;
    public static void main(String[] args)
    {
    MenuDemo frame=new MenuDemo();
    frame.pack();
    frame.setVisible(true);

    }
    public MenuDemo()
    {
    setTitle("Menu Demo");

     JPanel p1=new JPanel();
     p1.setLayout(new FlowLayout());
     p1.add(new JLabel("Number 1"));
     p1.add(jtfNum1=new JTextField(3));
     p1.add(new JLabel("Number 2"));
     p1.add(jtfNum2=new JTextField(3));
     p1.add(new JLabel("Result"));
     p1.add(jtfResult=new JTextField(4));
     jtfResult.setEditable(false);
     
     JPanel p2=new JPanel();
     p2.setLayout(new FlowLayout());
     p2.add(jbtAdd=new JButton("+"));
     p2.add(jbtSub=new JButton("-"));
     p2.add(jbtMul=new JButton("*"));
     p2.add(jbtDiv=new JButton("/"));
     p2.add(jbtClear=new JButton("c"));
     
     getContentPane().setLayout(new BorderLayout());
     getContentPane().add(p1,BorderLayout.CENTER);
     getContentPane().add(p2,BorderLayout.SOUTH);
     
     jbtAdd.addActionListener(this);
     jbtSub.addActionListener(this);
     jbtMul.addActionListener(this);
     jbtDiv.addActionListener(this);
     jbtClear.addActionListener(this);
     
    }
      public void actionPerformed(ActionEvent e)
      {
      String actionCommand=e.getActionCommand();
      if(e.getSource() instanceof JButton)
      {
      if("+".equals(actionCommand))
        calculate('+');
       if("-".equals(actionCommand))
        calculate('-');
       if("*".equals(actionCommand))
        calculate('*');
       if("/".equals(actionCommand))
        calculate('/');
        if("c".equals(actionCommand))
        calculate('c');
        else if("Close".equals(actionCommand))
         System.exit(0);    
     
      }
      }  
      public void calculate(char operator)
      {
     
      int num1=(Integer.parseInt(jtfNum1.getText().trim()));
      int num2=(Integer.parseInt(jtfNum2.getText().trim()));
      int result=0;
       
       switch(operator)
       {
        case '+': result=num1+num2;break;
        case '-': result=num1-num2;break;
        case '*': result=num1*num2;break;
        case '/': result=num1/num2;break;
        case 'c':{
               jtfNum1.setText("0");
               jtfNum2.setText("0");
        }
       
        }
      jtfResult.setText(String.valueOf(result));
     
      }
    }就像这样……但是我总觉得代码怪怪的……
      

  7.   


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import javax.swing.*;public class MenuDemo extends JFrame implements ActionListener {
    private JTextField jtfNum1, jtfNum2, jtfResult;
    private JButton jbtAdd, jbtSub, jbtMul, jbtDiv, jbtClear;
    private JMenuItem jmiAdd, jmiSub, jmiMul, jmiDiv, jmiClose; public static void main(String[] args) {
    MenuDemo frame = new MenuDemo();
    frame.pack();
    frame.setVisible(true); } public MenuDemo() {
    setTitle("Menu Demo"); JPanel p1 = new JPanel();
    p1.setLayout(new FlowLayout());
    p1.add(new JLabel("Number 1"));
    p1.add(jtfNum1 = new JTextField(3));
    p1.add(new JLabel("Number 2"));
    p1.add(jtfNum2 = new JTextField(3));
    p1.add(new JLabel("Result"));
    p1.add(jtfResult = new JTextField(4));
    jtfResult.setEditable(false); JPanel p2 = new JPanel();
    p2.setLayout(new FlowLayout());
    p2.add(jbtAdd = new JButton("+"));
    p2.add(jbtSub = new JButton("-"));
    p2.add(jbtMul = new JButton("*"));
    p2.add(jbtDiv = new JButton("/"));
    p2.add(jbtClear = new JButton("c")); getContentPane().setLayout(new BorderLayout());
    getContentPane().add(p1, BorderLayout.CENTER);
    getContentPane().add(p2, BorderLayout.SOUTH); jbtAdd.addActionListener(this);
    jbtSub.addActionListener(this);
    jbtMul.addActionListener(this);
    jbtDiv.addActionListener(this);
    jbtClear.addActionListener(this);//jbtClear也要添加事件
    } public void actionPerformed(ActionEvent e) {
    String actionCommand = e.getActionCommand();
    if (e.getSource() instanceof JButton) {
    calculate(actionCommand.charAt(0));
    }
    } public void calculate(char operator) { int num1 = (Integer.parseInt(jtfNum1.getText().trim()));
    int num2 = (Integer.parseInt(jtfNum2.getText().trim()));
    int result = 0; switch (operator) {
    case '+':
    result = num1 + num2;
    break;
    case '-':
    result = num1 - num2;
    break;
    case '*':
    result = num1 * num2;
    break;
    case '/':
    result = num1 / num2;
    break;
    case 'c':
    result = num1 = num2 = result = 0;
    jtfNum1.setText("0");
    jtfNum2.setText("0");
    break; }
    jtfResult.setText(String.valueOf(result));

    }
    }那这样,应该能满足你的需求了吧!
      

  8.   

    嘻嘻 ,满足了……只是有点疑问,那个actionCommand.charAt(0)怎么用的啊??
      

  9.   

    String类的方法,具体的参见API。
    public char charAt(int index)返回指定索引处的 char 值。索引范围为从 0 到 length() - 1。序列的第一个 char 值位于索引 0 处,第二个位于索引 1 处,依此类推,这类似于数组索引。 
    如果索引指定的 char 值是代理项,则返回代理项值。 
    指定者:
    接口 CharSequence 中的 charAt
    参数:
    index - char 值的索引。 
    返回:
    此字符串指定索引处的 char 值。第一个 char 值位于索引 0 处。 
    抛出: 
    IndexOutOfBoundsException - 如果 index 参数为负或小于此字符串的长度。