回 帖 发 新 帖 刷新版面

主题:[讨论]WindowListener接口的问题

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class WindowDemo extends JFrame implements ActionListener,WindowListener
{  JButton b1,b2,b3;
   JPanel p1,p2;
   JTextArea jta;
   Container cp=null;
   public WindowDemo()
     { p1=new JPanel();
              jta=new JTextArea(5,5);
       p1.setLayout(new BorderLayout());
       p1.add(jta,BorderLayout.CENTER);
       jta.setLineWrap(true);
       p2=new JPanel();
       p2.setLayout(new FlowLayout());
       p2.add(b1=new JButton("OK"));
       p2.add(b2=new JButton("Cancel"));
       p2.add(b3=new JButton("Exit"));
       cp=getContentPane();
       cp.setLayout(new BorderLayout());
       cp.add(p1,BorderLayout.CENTER);
       cp.add(p2,BorderLayout.SOUTH);
       b1.addActionListener(this);
       b2.addActionListener(this);
       b3.addWindowListener(new CloseWindow());  /这里有误/
       pack();
       setSize(300,300);
       setVisible(true);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
  
public void actionPerformed(ActionEvent e)
    { String command=e.getActionCommand();
                      if(command.equals("OK"))
              jta.setText("OK");
         else if(command.equals("Cancel"))
              jta.setText("Cancel");
    }
class CloseWindow extends WindowAdapter
{ public void windowClosing(WindowEvent e)
     { System.exit(0);}
}

public static void main(String args[])
     { new WindowDemo();}
}


上面的程序提示我  找不着变量b3  但我不明白怎么为何  请明白人帮忙看看  谢谢

回复列表 (共5个回复)

沙发

b3  没有  addWindowListener  方法

而且,有:
public void windowActivated(WindowEvent e) {
    // TODO Auto-generated method stub
    
}

public void windowClosed(WindowEvent e) {
    // TODO Auto-generated method stub
    
}

public void windowClosing(WindowEvent e) {
    // TODO Auto-generated method stub
    
}

public void windowDeactivated(WindowEvent e) {
    // TODO Auto-generated method stub
    
}

public void windowDeiconified(WindowEvent e) {
    // TODO Auto-generated method stub
    
}

public void windowIconified(WindowEvent e) {
    // TODO Auto-generated method stub
    
}

public void windowOpened(WindowEvent e) {
    // TODO Auto-generated method stub
    
}

这些方法没给予实现

板凳


不是的 我用的是适配器类的方法  就是那个WindowAdapter()其方法体为空  用这个就只覆盖其中的一个方法即可  问题是不明白为何会不好使  今天刚把该程序改过
把该类的 
public void actionPerformed(ActionEvent e)
    { String command=e.getActionCommand();
                      if(command.equals("OK"))
              jta.setText("OK");
         else if(command.equals("Cancel"))
              jta.setText("Cancel");
    }
class CloseWindow extends WindowAdapter
{ public void windowClosing(WindowEvent e)
     { System.exit(0);}
}
这两方法合起来做得到下面这个 

public void actionPerformed(ActionEvent e)
    { String command=e.getActionCommand();
         if(command.equals("OK"))
              jta.setText("OK");
         else if(command.equals("Cancel"))
              jta.setText("Cancel");
         else if(command.equals("Cancel"))
              System.exit(0);
    }

并把 b3.addWindowListener(new CloseWindow()); 
这换成 b3.addActionListener(this);并去掉上方的WindowListener接口就好使了
你再帮看看吧

3 楼


对啊,你已经用了方法 setDefaultCloseOperation()方法就不必再继承windowListener 借口了另外要退出程序用System.exit(0) 
即可

4 楼

b1, b2, b3都没实例化...会发生异常..

b3.addWindowListener(new CloseWindow());
改为
b3.addWindowListener(new WindowAdapter() {

    public void windowClosing(WindowEvent e) { 
        System.exit(0);
    }
});

5 楼


谢谢大家的回答  问题已解决

我来回复

您尚未登录,请登录后再回复。点此登录或注册