class NumberFormatFrame extends JFrame 
{
public NumberFormatFrame()
{
   setSize(WIDTH, HEIGHT);
   setTitle("NumberFormatTest");
   getContentPane().setLayout(new GridBagLayout());
   ActionListener listener = new
      ActionListener()
      {
         public void actionPerformed(ActionEvent event)
         {
            updateDisplay();
         }
      };                                  //就在这里了,为什么可以这样写?
   JPanel p = new JPanel();
   addRadioButton(p, numberRadioButton, rbGroup, listener);
   addRadioButton(p, currencyRadioButton, rbGroup, listener);
   addRadioButton(p, percentRadioButton, rbGroup, listener);
   locales = NumberFormat.getAvailableLocales();
   updateDisplay();
   localeCombo.addActionListener(listener);
   parseButton.addActionListener(new
      ActionListener()
      {
         public void actionPerformed(ActionEvent event)
         {
            String s = numberText.getText();
            try
            {
               Number n = currentNumberFormat.parse(s);
               if (n != null)
               {
                  currentNumber = n.doubleValue();
                  updateDisplay();
               }
               else
               {
                  numberText.setText("Parse error: " + s);
               }
            }
            catch(ParseException e)
            {
               numberText.setText("Parse error: " + s);
            }
         }
      });
}
........

解决方案 »

  1.   

    那是一个匿名内部类的用法,ActionListener是一个借口,它里面有一个actionPerformed方法,你的代码
    ActionListener listener = new
          ActionListener()
          {
             public void actionPerformed(ActionEvent event)
             {
                updateDisplay();
             }
          }; 这样写就相当于,创建一个对象listener,其实相当于以下代码
    public class xxActionListener  implements ActionListener{
    public void actionPerformed(ActionEvent event)
             {
                updateDisplay();
             }
    }ActionListener listener =new xxActionListener();这种用法在编写事件响应时经常用.这样的问题以前也有人问过的,你可以去搜一下.
      

  2.   

    这样写就相当于,创建一个对象listener
    -------------------------------------
    可是我现在就是不明白为什么这个接口在这里可以创建实例对象
      

  3.   

    非常感谢 vgvg(成功靠自己) ,虽然还不是太理解。
    看来还得在看看内部类的知识,
    结贴了。