问题描述:
我想编一个首界面是“Add”和“Del”按钮;然后点击“Add”按钮后,进入Add界面,然后点击Add的“OK“按钮,再输出
”Adding is OK!“信息;但是设置的监听器,只能监听主界面菜单情况,而对于接下来菜单则不予监听,如何处理这种情况??
源代码如下:
package MyGUI;
import java.io.*;
import java.awt.*;
import java.awt.event.*;import javax.swing.*;
public class MainFrame extends Frame implements ActionListener{
public String cmd;
Frame mf=new Frame();
Panel p1=new Panel();
Panel p2=new Panel();
Panel p3=new Panel();

Button b11=new Button("add");
Button b12=new Button("del");

TextField t2=new TextField("add");
Button b2=new Button("Ok");

TextField t3=new TextField("del");
Button b3=new Button("OK");
public void init(){

p1.add(b11);
p1.add(b12);
b11.addActionListener(this);
b12.addActionListener(this);
mf.add(p1);
mf.setVisible(true);
//mf.setVisible(true);

p2.add(t2);
p2.add(b2);
t2.addActionListener(this);
b2.addActionListener(this);

p3.add(t3);
p3.add(b3);
t3.addActionListener(this);
b3.addActionListener(this);


}

public void actionPerformed(ActionEvent e) {
String cmd=e.getActionCommand();
if(cmd=="add"){
add();

}
if(cmd=="del"){
del();
}


}
private void del() {
System.out.println("Del");
mf.add(p3);
p1.setVisible(false);
p3.setVisible(true);
if(cmd=="ok"){
System.out.println("Deling is OK");
}
} private void add(){
System.out.println("Add");
mf.add(p2);
p1.setVisible(false);
p2.setVisible(true);
if(cmd=="ok"){
System.out.println("Adding is OK");
}

}
public static void main(String args[]){
MainFrame book=new MainFrame();
book.init();
} }

解决方案 »

  1.   

    建议用SWING实现吧,下面实现了你想要的效果,之前不行主要是你的监听设计不够合理
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;import javax.swing.*;public class MainFrame extends JFrame implements ActionListener{
        public String cmd;
        JFrame mf=new JFrame();
        JPanel p1=new JPanel();
        JPanel p2=new JPanel();
        JPanel p3=new JPanel();    JButton b11=new JButton("add");
        JButton b12=new JButton("del");    JTextField t2=new JTextField("add");
        JButton b2=new JButton("Ok");
        JTextField t3=new JTextField("del");
        JButton b3=new JButton("OK");
        public void init(){        p1.add(b11);
            p1.add(b12);
            b11.addActionListener(this);
            b12.addActionListener(this);
            mf.add(p1);//mf.setVisible(true);        p2.add(t2);
            p2.add(b2);
    //        t2.addActionListener(this);        b2.addActionListener(this);        p3.add(t3);
            p3.add(b3);
    //        t3.addActionListener(this);
            b3.addActionListener(this);        mf.pack();
            mf.setLocationRelativeTo(null);
            mf.setVisible(true);
            mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }    public void actionPerformed(ActionEvent e) {
            String cmd=e.getActionCommand();        if(e.getSource()==b11){
                 add();
            }
            if(e.getSource()==b12){
                 del();
            }
            if(e.getSource()==b2){
                 System.out.println("Adding is OK");
            }
        }
        private void del() {
            System.out.println("Del");
            mf.add(p3);
            p1.setVisible(false);
            p3.setVisible(true);
            if(cmd=="ok"){
                System.out.println("Deling is OK");
            }
        }    private void add(){
            System.out.println("Add");
            mf.add(p2);
            p1.setVisible(false);
            p2.setVisible(true);
        }
        public static void main(String args[]){
            MainFrame book=new MainFrame();
            book.init();
        }}
      

  2.   

    你这个代码,逻辑就有问题,你在del 和add 里面直接写了
    if(cmd=="ok"){
    System.out.println("Deling is OK");
    }
    这段代码根本就不会响应,肯定没有效果
    这个要加在public void actionPerformed(ActionEvent e) {
    String cmd=e.getActionCommand();
    if(cmd=="add"){
    add();
    }
    if(cmd=="del"){
    del();
    }
    }
    里面,然后就是你第二次界面没有显示出来,在add(p2)的时候再写一次mf.remove(p1);
    mf.add(p3);
    mf.setVisible(true);
      

  3.   

    感谢2楼解答,问题可以解决!!从上面修改的程序,我的总结是:多级菜单中各按钮及文本的监听都放在一个ActionPerformed()函数里就行!
      

  4.   

    对,是这个问题!其实我这个本想做一个简单的,添加,删除,查找的通讯录小程序。
    现在有两个问题:其一,单独的添加,删除,查找都可以了。但是融合之后,但是界面之间切换后,就无法再次监听相应!
                  其二,之间的框架关系问题。本来是所有的都糅合在一个类里面。想一下,貌似没有用到JAV
    A面向对象的特点,然后就想把框架做一个框架类,把添加,删除,查询,等合一起做一个功能类;
                     然后,框架类中,调用各功能的方法;而功能则调用相应框架类中的相应界面进行操作。
                但是,框架类中调功能类,会出现其方法未定义;反之类似;