我在做一个四则运算器。把加减乘除都放到组合框里了,怎么获得组合框里的信息呢?我这么写的但不对
if( box.getName().equals("+") )
{
num3 = num1 + num2;
}
如果组合框信息选“加”就执行加操作。
编译后 提示 空指针错误

解决方案 »

  1.   

    package com.guiaction;import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JTextField;public class ArithmeticOrgan extends JFrame
    {
    public static JTextField jf1, jf2, jf3;

    public static String[] str = {"+","-","*","/"};

    public static Container c;
    public static JComboBox box;
    public static JButton end; public static String str1; public static String str2, str3;

    public static int num1, num2, num3;

    ArithmeticOrgan()
    {
    super("Arithmetic Organ 1.0 by Mr Wang");
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    addComponent();
    c = getContentPane();
    c.setLayout(new FlowLayout());

    c.add(jf1);
    c.add(box);
    c.add(jf2);
    c.add(end);
    c.add(jf3);

    this.pack();
    this.setLocation(300, 200);
    this.setVisible(true);
    }
    void addComponent()
    {
    jf1 = new JTextField(4);
    box = new JComboBox(str);
    box.addActionListener(new ComBoxListener());
    jf2 = new JTextField(4);
    end = new JButton("=");
    end.addActionListener(new ButtonListener());
    jf3 = new JTextField(4);
    }

    public static void main(String[] args)
    {
    new ArithmeticOrgan();
    }}class ComBoxListener implements ActionListener
    { public void actionPerformed(ActionEvent e)
    {
    // TODO Auto-generated method stub
    String a = e.getActionCommand();
    ArithmeticOrgan.str1 = ArithmeticOrgan.jf1.getText();
    ArithmeticOrgan.num1 = Integer.parseInt(ArithmeticOrgan.str1);
    ArithmeticOrgan.str2 = ArithmeticOrgan.jf2.getText();
    ArithmeticOrgan.num2 = Integer.parseInt(ArithmeticOrgan.str2);
    if(a.equals(ArithmeticOrgan.box.getName()))
    {
    ArithmeticOrgan.num3 = ArithmeticOrgan.num1 + ArithmeticOrgan.num2;
    }
    }
    }class ButtonListener implements ActionListener
    { public void actionPerformed(ActionEvent e)
    {
    // TODO Auto-generated method stub
    Integer NUM3=new Integer(ArithmeticOrgan.num3);
    ArithmeticOrgan.str3 = NUM3.toString();
    ArithmeticOrgan.jf3.setText(ArithmeticOrgan.str3);
    }
    }
      

  2.   

    package com.guiaction;import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JTextField;public class ArithmeticOrgan extends JFrame
    {
    public static JTextField jf1, jf2, jf3;

    public static String[] str = {"+","-","*","/"};

    public static Container c;
    public static JComboBox box;
    public static JButton end; public static String str1; public static String str2, str3;

    public static int num1, num2, num3;

    ArithmeticOrgan()
    {
    super("Arithmetic Organ 1.0 by Mr Wang");
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    addComponent();
    c = getContentPane();
    c.setLayout(new FlowLayout());

    c.add(jf1);
    c.add(box);
    c.add(jf2);
    c.add(end);
    c.add(jf3);

    this.pack();
    this.setLocation(300, 200);
    this.setVisible(true);
    }
    void addComponent()
    {
    jf1 = new JTextField(4);
    box = new JComboBox(str);
    box.addActionListener(new ComBoxListener());
    jf2 = new JTextField(4);
    end = new JButton("=");
    end.addActionListener(new ButtonListener());
    jf3 = new JTextField(4);
    }

    public static void main(String[] args)
    {
    new ArithmeticOrgan();
    }}class ComBoxListener implements ActionListener
    { public void actionPerformed(ActionEvent e)
    {
    // TODO Auto-generated method stub
    String a = e.getActionCommand();
    ArithmeticOrgan.str1 = ArithmeticOrgan.jf1.getText();
    ArithmeticOrgan.num1 = Integer.parseInt(ArithmeticOrgan.str1);
    ArithmeticOrgan.str2 = ArithmeticOrgan.jf2.getText();
    ArithmeticOrgan.num2 = Integer.parseInt(ArithmeticOrgan.str2);
    if(a.equals(ArithmeticOrgan.box.getName()))
    {
    ArithmeticOrgan.num3 = ArithmeticOrgan.num1 + ArithmeticOrgan.num2;
    }
    }
    }class ButtonListener implements ActionListener
    { public void actionPerformed(ActionEvent e)
    {
    // TODO Auto-generated method stub
    Integer NUM3=new Integer(ArithmeticOrgan.num3);
    ArithmeticOrgan.str3 = NUM3.toString();
    ArithmeticOrgan.jf3.setText(ArithmeticOrgan.str3);
    }
    }
      

  3.   

    package com.guiaction;import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JTextField;public class ArithmeticOrgan extends JFrame
    {
    public static JTextField jf1, jf2, jf3;

    public static String[] str = {"+","-","*","/"};

    public static Container c;
    public static JComboBox box;
    public static JButton end; public static String str1; public static String str2, str3;

    public static int num1, num2, num3;

    ArithmeticOrgan()
    {
    super("Arithmetic Organ 1.0 by Mr Wang");
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    addComponent();
    c = getContentPane();
    c.setLayout(new FlowLayout());

    c.add(jf1);
    c.add(box);
    c.add(jf2);
    c.add(end);
    c.add(jf3);

    this.pack();
    this.setLocation(300, 200);
    this.setVisible(true);
    }
    void addComponent()
    {
    jf1 = new JTextField(4);
    box = new JComboBox(str);
    box.addActionListener(new ComBoxListener());
    jf2 = new JTextField(4);
    end = new JButton("=");
    end.addActionListener(new ButtonListener());
    jf3 = new JTextField(4);
    }

    public static void main(String[] args)
    {
    new ArithmeticOrgan();
    }}class ComBoxListener implements ActionListener
    { public void actionPerformed(ActionEvent e)
    {
    // TODO Auto-generated method stub
    String a = e.getActionCommand();
    ArithmeticOrgan.str1 = ArithmeticOrgan.jf1.getText();
    ArithmeticOrgan.num1 = Integer.parseInt(ArithmeticOrgan.str1);
    ArithmeticOrgan.str2 = ArithmeticOrgan.jf2.getText();
    ArithmeticOrgan.num2 = Integer.parseInt(ArithmeticOrgan.str2);
    if(a.equals(ArithmeticOrgan.box.getName()))
    {
    ArithmeticOrgan.num3 = ArithmeticOrgan.num1 + ArithmeticOrgan.num2;
    }
    }
    }class ButtonListener implements ActionListener
    { public void actionPerformed(ActionEvent e)
    {
    // TODO Auto-generated method stub
    Integer NUM3=new Integer(ArithmeticOrgan.num3);
    ArithmeticOrgan.str3 = NUM3.toString();
    ArithmeticOrgan.jf3.setText(ArithmeticOrgan.str3);
    }
    }
      

  4.   

    package com.guiaction;import java.awt.Container;
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JTextField;public class ArithmeticOrgan extends JFrame
    {
    public static JTextField jf1, jf2, jf3;

    public static String[] str = {"+","-","*","/"};

    public static Container c;
    public static JComboBox box;
    public static JButton end; public static String str1; public static String str2, str3;

    public static int num1, num2, num3;

    ArithmeticOrgan()
    {
    super("Arithmetic Organ 1.0 by Mr Wang");
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    addComponent();
    c = getContentPane();
    c.setLayout(new FlowLayout());

    c.add(jf1);
    c.add(box);
    c.add(jf2);
    c.add(end);
    c.add(jf3);

    this.pack();
    this.setLocation(300, 200);
    this.setVisible(true);
    }
    void addComponent()
    {
    jf1 = new JTextField(4);
    box = new JComboBox(str);
    box.addActionListener(new ComBoxListener());
    jf2 = new JTextField(4);
    end = new JButton("=");
    end.addActionListener(new ButtonListener());
    jf3 = new JTextField(4);
    }

    public static void main(String[] args)
    {
    new ArithmeticOrgan();
    }}class ComBoxListener implements ActionListener
    { public void actionPerformed(ActionEvent e)
    {
    // TODO Auto-generated method stub
    String a = e.getActionCommand();
    ArithmeticOrgan.str1 = ArithmeticOrgan.jf1.getText();
    ArithmeticOrgan.num1 = Integer.parseInt(ArithmeticOrgan.str1);
    ArithmeticOrgan.str2 = ArithmeticOrgan.jf2.getText();
    ArithmeticOrgan.num2 = Integer.parseInt(ArithmeticOrgan.str2);

    //这里可能有错误  加法不能用 结果是0 不知道怎么回事

    if(a.equals(ArithmeticOrgan.box.getName()))
    {
    ArithmeticOrgan.num3 = ArithmeticOrgan.num1 + ArithmeticOrgan.num2;
    }
    }
    }class ButtonListener implements ActionListener
    { public void actionPerformed(ActionEvent e)
    {
    // TODO Auto-generated method stub
    Integer NUM3=new Integer(ArithmeticOrgan.num3);
    ArithmeticOrgan.str3 = NUM3.toString();
    ArithmeticOrgan.jf3.setText(ArithmeticOrgan.str3);
    }
    }
      

  5.   

    a.equals(ArithmeticOrgan.box.getName())
    看一下a和ArithmeticOrgan.box.getName()的值应该就知道原因了
      

  6.   

    if ("+".equals((String)combo.getSelectedItem())) 你也不看getName的API文档。
      

  7.   

    a和ArithmeticOrgan.box.getName()我写的测试程序是相等的if ("+".equals((String)combo.getSelectedItem())) 
    我改成这样了也不对的。
      

  8.   

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.Box;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JFormattedTextField;import java.text.NumberFormat;public class ArithmeticOrgan extends JFrame
    {
        private static final String[] OPERATORS = {"+","-","*","/"};
        private JFormattedTextField input1, input2, result;    
        private JComboBox combo;
        private JButton equals;
        
        public ArithmeticOrgan()
        {
            super("Arithmetic Organ 1.0 by Mr Wang");
           
            initComponents();        Box container = Box.createHorizontalBox();  
            container.add(input1);
            container.add(combo);
            container.add(input2);
            container.add(equals);
            container.add(result);
            setContentPane(container);        pack();
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
            setLocationRelativeTo(null);
            this.setVisible(true);
        }
        private void initComponents()
        {
            NumberFormat format = NumberFormat.getIntegerInstance();
            input1 = new JFormattedTextField(format);
            input1.setColumns(4);        combo = new JComboBox(OPERATORS);        input2 = new JFormattedTextField(format);
            input2.setColumns(4);        equals = new JButton("=");
            equals.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent evt)
                    {
                        try
                            {
                                int i1 = Integer.parseInt(input1.getText());
                                int i2 = Integer.parseInt(input2.getText());
                                switch(combo.getSelectedIndex())
                                    {
                                    case 0: result.setText(Integer.toString(i1+i2)); break;
                                    case 1: result.setText(Integer.toString(i1-i2)); break;
                                    case 2: result.setText(Integer.toString(i1*i2)); break;
                                    case 3: result.setText(Integer.toString(i1/i2)); break;
                                    default: result.setText("");
                                    }
                            }
                        catch(NumberFormatException e)
                            {
                                assert false; // 不会该执行到这里,必须的!
                            }
                        catch(ArithmeticException ae)
                            {
                                System.err.println(ae);   
                            }
                    }
                });
            
            result = new JFormattedTextField(format);
            result.setColumns(4);
        }
        
        public static void main(String[] args)
        {
            java.awt.EventQueue.invokeLater(new Runnable()
                {
                    public void run(){
                        new ArithmeticOrgan();
                    }
                });
        }
    }
      

  9.   

    谢谢楼上,您的代码我会仔细阅读的!运行一切正常,就是有个地方我们都没学习,不知道那是什么
    java.awt.EventQueue.invokeLater(new Runnable()
    {
    public void run()
    {
    new ArithmeticOrgan();
    }
    });居然还可以这么用。这个叫匿名内部类吗?呵呵,菜鸟一个,见笑了!