A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王程 中级黑马   /  2012-8-8 15:06  /  1699 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看了毕老师关于图形界面的视频,自己动手试了一下
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. class FrameDemo
  4. {
  5.    private Frame f;
  6.    private Button but;
  7.    FrameDemo()
  8.    {
  9.        init();
  10.    }
  11. public static void main(String[] args)
  12. {
  13.         new FrameDemo();
  14. }
  15. private void init()
  16. {
  17.    f=new Frame("My Frame");
  18.    f.setSize(400,300);
  19.    f.setLocation(300,200);
  20.    f.setLayout(new FlowLayout());
  21.    but=new Button("转换");
  22.    f.add(but);
  23.    f.setVisible(true);
  24. }
  25. f.addWindowListener(new WindowAdapter()//这一行报错, <identifier> expected
  26.                                                                  //f.addWindowListener(new WindowAdapter()
  27. {
  28.      public void windowClosing(WindowEvent e)
  29.      {
  30.            System.out.println("我关");
  31.            System.exit(0);
  32.      }
  33.      public void windowOpende(WindowEvent e)
  34.      {
  35.          System.out.println("打开");

  36.      }
  37.      public void windowActiviated(WindowEvent e)
  38.      {
  39.       System.out.println("被置为当前");
  40.      }
  41.      });
  42.      }
复制代码
不知道为什么会错?

3 个回复

倒序浏览
我直接按照你的思路来:
你应该是想把f.addWindowListener(new WindowAdapter(){})放到init()中,但是你在在一个函数外边加了这一句,肯定有问题。
要么写个函数调用它,要么把它放到init(){ }里面。
并且复写的函数应该也不对吧。
回复 使用道具 举报
import java.awt.*;
import java.awt.event.*;
class jFrameDemo
{
   private Frame f=null;
   private Button but;
   jFrameDemo()
   {
       init();
   }
public static void main(String[] args)
{
        new jFrameDemo();
}
private void init()
{
   f=new Frame("My Frame");
   f.setSize(400,300);
   f.setLocation(300,200);
   f.setLayout(new FlowLayout());
   but=new Button("转换");
   f.add(but);
   f.setVisible(true);
   f.addWindowListener(new WindowAdapter()//这一行报错, <identifier> expected                                                                 //f.addWindowListener(new WindowAdapter()
{
     public void windowClosing(WindowEvent e)
     {
           System.out.println("我关");
           System.exit(0);
     }
     public void windowOpende(WindowEvent e)
     {
         System.out.println("打开");

     }
     public void windowActiviated(WindowEvent e)
     {
      System.out.println("被置为当前");
     }
     });
}
}


你在 FrameDemo()调用init():但是你的init()方法中没有 addWindowListener()方法,你的 addWindowListener()写在了init()方法的外面 看看上面代码,能达到你要的效果么?
回复 使用道具 举报
其实很简单,f.addWindowListener(new WindowAdapter()//这一行报错, <identifier> expected

                                                                 //f.addWindowListener(new WindowAdapter()

{

     public void windowClosing(WindowEvent e)

     {

           System.out.println("我关");

           System.exit(0);

     }

     public void windowOpende(WindowEvent e)

     {

         System.out.println("打开");



     }

     public void windowActiviated(WindowEvent e)

     {

      System.out.println("被置为当前");

     }

     });

这个语句没有自己的作用域,没有自己所在的方法体,所以会报错,你可以将这个封装到一个方法里面去,然后在inti这个方法里面来调用这个方法就可以,
这个也是毕老师提出的组件和事件分开来描述,这样更容易区分这个里面的关系,也就不会出现那么多错误了!


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马